从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解决了这个问题和一整类类似的问题。