为什么我不能直接使用函数 return 值作为 PHP 中的动态 class 名称?

Why can't I directly use function return values as dynamic class names in PHP?

从 PHP 5.3 开始,可以将变量用作 class 名称,不仅用于对象实例化,而且 even for static methods as well:

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

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

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) 语法处理器中发现了错误吗?

我不知道我是否会称它为 "bug," 但它肯定是 PHP 在 PHP 之前的特质 7. 这个,以及整个 class 的类似问题,已由 Uniform Variable Syntax RFC.

解决