我有课Logger
其中,除其他外,还有一个方法Log
.
As Log
最常见的用途是Logger
例如,我已经有线__invoke
打电话Log
另一个类“Site”包含一个成员“Log”,它是 Logger 的一个实例。
为什么这会起作用:
$Log = $this->Log;
$Log("Message");
但不是这个:
$this->Log("Message");
前者失败并显示“PHP 致命错误:调用未定义的方法 Site::Log()”
这是可调用对象实现的限制,还是我误解了什么?
不幸的是,这(仍然)是 PHP 的一个限制,但仔细想想,这是有道理的,因为类可以包含共享名称的属性和方法。例如:
<?php
class Test {
public $log;
public function __construct() {
$this->log = function() {
echo 'In Test::log property';
};
}
public function log() {
echo 'In Test::log() method';
}
}
$test = new Test;
$test->log(); // In Test::log() method
call_user_func($test->log); // In Test::log property
?>
如果 PHP 允许使用您想要的语法,将调用哪个函数?不幸的是,这只给我们留下了call_user_func[_array]()
(或复制$this->log
到另一个变量并调用它)。
但是,如果可以接受以下语法,那就太好了:
<?php
{$test->log}();
?>
但可惜,事实并非如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)