读书小悟
2017.01.31 22:30:08

看到很多文章,为了论述某个观点,做了许多文字描述,画了许多图,举了许多例子。其实一个人的能力关键看两点:日常积累程度,抽象(总结)能力

比如看到这句“So what is a PHP interface? An interface is a contract between two PHP objects that lets one object depend not on what another object is but, instead, on what another object can do.”就会让我有一种“做化学实验提取晶体”的感觉。

话不要多,说到点子上就是字字千金。平时学习要注意自己的知识吸收和总结思考,有疑惑要敢于发散思维,这样天长日久下来,一是积累不断增加,二是能逐渐强化前面提到的抽象(总结)能力。

今天看到PHP的Closure内容时,书中只对use、bindto做了解释。再翻翻手册,发现还有一个bindto的静态版本bind。然后再深入点,发现PHP 7又添加了一个call。这样,加上一个use keyword,把几种方法测试一遍,结合手册,PHP Closure的内容就几乎覆盖到了。

<?php
class HelloWorld
{
    private $_greeting = "Hello";
}

$hello = new HelloWorld();

$closure = function ($whom) {
    echo $this->_greeting . " " . $whom . ".\n";
};

// PHP 5.4引入bindto、bind(bindTo()的静态版本)。
$closure->bindto($hello, "HelloWorld")("2gua");
$closure->bindto($hello, $hello)("2gua");

Closure::bind($closure, $hello, "HelloWorld")("2gua");
Closure::bind($closure, $hello, $hello)("2gua");

// PHP 7引入call()。
$closure->call($hello, '2gua');

// 其他的用法。
$name = "2gua";
// error: Undefined variable: name.
// (function ($foo) {
//     echo $name . " " . $foo . ".\n";
// })("gooooooooo");

(function ($foo) use ($name) {
    echo $name . " " . $foo . ".\n";
})("gooooooooo");

输出:

Hello 2gua.
Hello 2gua.
Hello 2gua.
Hello 2gua.
Hello 2gua.
2gua gooooooooo.

读书有一点一滴的收获,足矣。

重操PHP“旧业”的感觉挺好的。春节期间出去走走让自己生活充实;读书学习、看看小说则让自己不停思考。

另外要夸夸Typora这款Markdown编辑器,也感谢所有向我推荐Markdown编辑器的童鞋们。这篇就是我用Typora写的第一篇文章。


(1)

发表评论请先登录或注册