1

从 PHP 5.3 开始,可以使用变量作为类名,不仅用于对象实例化,甚至用于静态方法

$className = 'My\Name\Spaced\Thing';
$thing = $className::foo('hello world');

但是,如果我尝试使用函数或方法的返回值而不是实际变量,则会出现错误:

function getClassName() 
{
    return 'My\Name\Spaced\Thing';
}

// Raises "syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)"
$thing = getClassName()::foo('hello world');

另一方面,这很好用:

$className = getClassName();
$thing = $className::foo('hello world');

是什么赋予了?我刚刚在 PHP (5.6) 语法处理器中发现了一个错误吗?

4

1 回答 1

2

我不知道我是否会称它为“错误”,但它肯定是 PHP 7 之前 PHP 的一个特性。统一变量语法 RFC解决了这个问题以及一整类类似的问题。

于 2016-08-14T01:16:34.220 回答