【问题标题】:accessing static methods using a variable class name (PHP)使用变量类名 (PHP) 访问静态方法
【发布时间】:2011-06-30 21:43:09
【问题描述】:

我正在尝试访问静态方法,但使用变量作为类名。这可能吗?我似乎对此有问题。我希望能够做这样的事情:

class foo {
    public static function bar() {
        echo 'test';
    }
}

$variable_class_name = 'foo';
$variable_class_name::bar();

我也希望能够使用静态变量来做类似的事情。

【问题讨论】:

  • 这对我来说在 php 5.3.2 上工作得很好。
  • 我相信使用 5.2。收到类似“解析错误:语法错误,第 35 行 /some/path/application/models/lev_base_model.php 中的意外 T_PAAMAYIM_NEKUDOTAYIM”的错误
  • 您运行的是什么版本的 PHP?据我所知,您在最近的版本中已经能够做到这一点(5.2+,虽然不确定从什么时候开始有效)
  • @Gordon 似乎只允许在 5.3+ 中使用

标签: php variables methods static


【解决方案1】:

该语法仅在 PHP 5.3 及更高版本中受支持。以前的版本不理解该语法,因此您的解析错误(T_PAAMAYIM_NEKUDOTAYIM 指的是:: 运算符)。

在以前的版本中,您可以尝试call_user_func(),向其传递一个包含类名及其方法名的数组:

$variable_class_name = 'foo';
call_user_func(array($variable_class_name, 'bar'));

【讨论】:

  • 看起来很棒。静态属性有类似的东西吗?
  • @dqhendricks:不确定类变量。对于参数,将call_user_func() 与可变参数(如sprintf())一起使用,或者将call_user_func_array() 与参数数组一起使用。这两个函数都返回方法的返回值。
【解决方案2】:

PHP 5.1 及以上版本可以使用reflection

class foo {
    public static $bar = 'foobar';
}

$class = 'foo';
$reflector = new ReflectionClass($class);
echo $reflector->getStaticPropertyValue('bar');

> foobar

【讨论】:

    猜你喜欢
    • 2017-11-01
    • 2015-07-22
    • 2012-06-29
    • 2017-01-13
    • 2017-04-16
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多