使用变量类名 (PHP) 访问静态方法
Posted
技术标签:
【中文标题】使用变量类名 (PHP) 访问静态方法【英文标题】:accessing static methods using a variable class name (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+ 中使用 【参考方案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()
与参数数组一起使用。这两个函数都返回方法的返回值。
@dqhendricks:见"Getting static property from a class with dynamic class name in PHP"。【参考方案2】:
PHP 5.1 及以上版本可以使用reflection:
class foo
public static $bar = 'foobar';
$class = 'foo';
$reflector = new ReflectionClass($class);
echo $reflector->getStaticPropertyValue('bar');
> foobar
【讨论】:
以上是关于使用变量类名 (PHP) 访问静态方法的主要内容,如果未能解决你的问题,请参考以下文章