我在静态属性中使用了闭包类。
如果我在变量和调用中复制属性,它将不会产生任何错误。
但是,如果我直接调用静态属性,我会发生致命错误Function name must be a string
<?php
class Ctest{
static $sysClassReturnObj;
static function test(){
self::$sysClassReturnObj = function(){};
self::$sysClassReturnObj();
}
}
Ctest::test();
为什么我不能打电话,在哪里可以阅读这些行为?
答案 0 :(得分:2)
这是一个PHP主义。 ()
绑定比::
更紧密,因此您的函数调用正在执行,相当于
self::($var());
这使$var
成为未定义的局部变量,而不是类属性。
注意结尾处的警告:
marc@panic:~$ cat z.php
<?php
class Ctest {
static $foo;
static function test() {
self::$foo = function() {};
self::$foo();
}
}
Ctest::test();
marc@panic:~$ php z.php
PHP Notice: Undefined variable: foo in /home/marc/z.php on line 7
PHP Fatal error: Function name must be a string in /home/marc/z.php on line 7
所以是的,你必须用
解决这个问题$temp = self::$sysClassReturnObj;
$temp();
答案 1 :(得分:0)
我认为你的问题来自于:self :: $ sysClassReturnObj();.您已声明了一个变量(static $ sysClassReturnObj;),并将其称为函数。