在php中调用静态属性

时间:2015-04-09 15:09:39

标签: php static

我在静态属性中使用了闭包类。

如果我在变量和调用中复制属性,它将不会产生任何错误。 但是,如果我直接调用静态属性,我会发生致命错误Function name must be a string

<?php
class Ctest{
    static $sysClassReturnObj;

    static function test(){
        self::$sysClassReturnObj = function(){};
        self::$sysClassReturnObj();
    }
}

Ctest::test();

为什么我不能打电话,在哪里可以阅读这些行为?

2 个答案:

答案 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;),并将其称为函数。