【问题标题】:Why can't I directly use function return values as dynamic class names in PHP?为什么我不能直接使用函数返回值作为 PHP 中的动态类名?
【发布时间】:2016-12-20 16:05:32
【问题描述】:

从 PHP 5.3 开始,可以使用变量作为类名,不仅用于对象实例化,还用于even for static methods as well

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

【问题讨论】:

    标签: php syntax syntax-error late-static-binding


    【解决方案1】:

    我不知道我是否会称其为“错误”,但它肯定是 PHP 7 之前 PHP 的一个特性。Uniform Variable Syntax RFC 解决了这个问题以及一整类类似问题。

    【讨论】:

    • 谢谢,看起来这在 RFC 中有明确规定:“静态属性获取和方法调用现在可以应用于任何可解引用的表达式。例如 $foo['bar']::$baz, $foo::$bar::$baz 和 $foo->bar()::baz() 现在都有效。”除了首先分配给字符串变量之外,PHP
    • 不,必须使用中间变量。 [如果有的话]会在这里工作。)
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 2019-09-05
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多