1
由于PHP 5.3,它是可以使用一个变量作为类名,不仅为对象的实例,但even for static methods as well:为什么我不能在PHP中直接使用函数返回值作为动态类名?
$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)语法处理器中发现了一个错误吗?
感谢,它看起来像是在RFC中明确表示的:“静态属性获取和方法调用现在可以应用于任何可忽略的表达式,例如$ foo ['bar'] :: $ baz,$ foo :: $ bar :: $ baz和$ foo-> bar():: baz()现在都是有效的。“ 除了仅仅分配给一个字符串变量之外,PHP <7是否有任何解决方法? – alexw
不,应该使用中间变量。 (嗯,实际上你可能会用一些非常模糊的技巧来提取语法,但是他们会给你一个糟糕的混乱,这是不值得的,我甚至不想把它们[如果有的话]会在这里工作。) –