PHP关闭类实例
作者:互联网
如果我有一个类:
class MyClass
{
public function foo()
{
echo "foo";
}
}
然后在类之外实例化它并尝试在其中创建一个匿名函数:
$mine = new MyClass();
$mine->bar = function() {
echo "bar";
}
然后尝试称它为$mine-> bar(),我得到:
Fatal error: Call to undefined method MyClass::bar() in …
如何在类实例上创建匿名函数/闭包?
旁白:在你告诉我之前我应该重新考虑我的逻辑或正确使用接口和OOP,在我的情况下,它是一种方便的方法,适用于这个特定的实体类实例,试图清理遗留的程序应用程序.是的,我正在使用PHP 5.3
解决方法:
请参阅我的博客文章:http://blog.flowl.info/2013/php-container-class-anonymous-function-lambda-support/
你需要添加一个神奇的__call
功能:
public function __call($func, $args) {
return call_user_func($this->$func, $args);
}
问题是在此构造中,您可以从公共范围调用私有方法.
我建议不要简单地将新变量添加到未定义的类中.您可以使用magic __set函数来避免这种情况,并捕获容器中的所有未定义变量(=数组,就像在我的博客文章中一样)并更改call_user_func行为以仅在数组内调用:
// inside class:
public $members = array();
public function __call($func, $args) {
// note the difference of calling only inside members:
return call_user_func($this->members[$func], $args);
}
标签:php,oop,closures,anonymous-function 来源: https://codeday.me/bug/20190831/1774227.html