为什么我不能直接使用函数 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.
解决
从 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.
解决