3

我不熟悉在类中使用静态方法和属性。我想要做的是运行一个变量函数,但不能使用:

self::$static_var()

PHP 抛出一个通知:

Undefined variable: static_var

我必须首先分配给一个局部变量,如下所示:

$local_var = self::$static_var;

那我可以做

$local_var();

这是一些示例代码。我不明白为什么测试 1不起作用。我必须进行测试 2才能获得所需的功能。 问题:为什么测试 1不起作用?

测试 1 - 不起作用

X::do_stuff('whatever');

class X {
    public static $static_var = 'print_r';

    public static function do_stuff($passed_var) {
        self::$static_var($passed_var);
    }
}

测试 2 - 有效

X::do_stuff('whatever');

class X {
    public static $static_var = 'print_r';

    public static function do_stuff($passed_var) {
        $local_var = self::$static_var;
        $local_var($passed_var);
    }
}
4

1 回答 1

3

使用call-user-func

call_user_func(self::$static_var, $passed_var);

关于您编辑的问题:

我试图在 PHP 文档中找到解释。这可能是因为$static_var在处理函数调用时尚未评估。但您问题的最佳答案可能是:因为它就是这样。一个很好的例子是:$classname::metdhod();在 PHP 5.3 之前无效。现在它是。真的没有理由。你应该问PHP的家伙。

于 2013-02-01T20:53:09.273 回答