当你试图调用一个受保护的或私有的方法时,它会失败,因为使用它就像从外部调用一样。有没有办法来解决这个5.3,据我知道,但来了PHP 5.4,它将按预期工作,开箱即用:
class Hello {
private $message = "Hello world\n";
public function createClosure() {
return function() {
echo $this->message;
};
}
}
$hello = new Hello();
$helloPrinter = $hello->createClosure();
$helloPrinter(); // outputs "Hello world"
更有甚者,你将能够改变什么$这点在运行时,对于anonymus功能(关闭重新绑定):
class Hello {
private $message = "Hello world\n";
public function createClosure() {
return function() {
echo $this->message;
};
}
}
class Bye {
private $message = "Bye world\n";
}
$hello = new Hello();
$helloPrinter = $hello->createClosure();
$bye = new Bye();
$byePrinter = $helloPrinter->bindTo($bye, $bye);
$byePrinter(); // outputs "Bye world"
实际上,anonymus功能将有一个bindTo() method,其中第一个参数可用于指定什么$这点,第二个参数控制能见度水平应为。如果你省略了第二个参数,那么可见性就像从“外部”调用一样,例如。只有公共财产可以被访问。还要注意bindTo的工作方式,它不会修改原始函数,它返回一个新的。