使用变量类名访问静态方法(PHP)

15

我正在尝试访问一个静态方法,但是使用变量作为类名。这种做法可行吗?我好像遇到了一些问题。我想能够像这样做:

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

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

我希望能够使用静态变量完成类似的操作。


1
这对我在php 5.3.2上运行良好。 - Marc B
我相信你正在使用5.2版本。出现了一个错误,类似于“Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /some/path/application/models/lev_base_model.php on line 35”。 - dqhendricks
你正在运行哪个版本的PHP?据我所知,最近的版本(5.2+,但不确定从何时开始有效)已经可以做到这一点。 - GordonM
@Gordon 似乎只能在5.3以上版本中使用。 - dqhendricks
2个回答

21

这种语法只支持PHP 5.3及更高版本。以前的版本不理解这种语法,因此会出现解析错误(T_PAAMAYIM_NEKUDOTAYIM是指::运算符)。

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

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

看起来很不错。是否有类似的用于静态属性的东西? - dqhendricks
@dqhendricks:关于类变量不太确定。对于参数,可以使用带有可变参数的call_user_func()(例如sprintf()),或者使用带有参数数组的call_user_func_array()。这两个函数都返回方法的返回值。 - BoltClock

8
您可以使用 PHP 5.1 及以上版本的 反射
class foo {
    public static $bar = 'foobar';
}

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

> foobar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接