为什么我不能在PHP中直接使用函数返回值作为动态类名?


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

从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)语法处理器中的一个bug ?

我不知道是否应该称之为"bug",但这肯定是PHP 7之前的一个特性。统一变量语法RFC解决了这个问题和一整类类似的问题。