【问题标题】:PHP: Why can't a static variable in a class be used as a variable function?PHP:为什么不能将类中的静态变量用作变量函数?
【发布时间】:2013-02-01 20:47:11
【问题描述】:

我不熟悉在类中使用静态方法和属性。我想做的是运行variable function,但不能使用:

self::$static_var()

PHP 抛出一个通知:

Undefined variable: static_var

我必须首先像这样分配给一个局部变量:

$local_var = self::$static_var;

那我就可以了

$local_var();

这是一些示例代码。 我不明白为什么 Test 1 不起作用。我必须进行 Test 2 以获得所需的功能。 问题: 为什么是 Test 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);
    }
}

【问题讨论】:

  • 试试call_user_func(self::$static_var, $passed_var)
  • 对不起,@Shikiryu。我为你编辑了问题。

标签: php function variables static


【解决方案1】:

使用call-user-func:

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

关于您编辑的问题:

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

【讨论】:

  • 谢谢。我编辑了我的问题,使其更具体。我不是在寻找解决方法(正如我已经概述过的那样),我只是想理解为什么测试 1 不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 2020-09-29
  • 2012-11-23
  • 2014-03-05
相关资源
最近更新 更多