【问题标题】:Why unset() doesn't work in PHP ternary operator为什么 unset() 在 PHP 三元运算符中不起作用
【发布时间】:2012-05-15 13:57:03
【问题描述】:

所以这有问题,但我对此视而不见。 即使在阅读了两次文档之后 (PHP Comparison Operators)

isset($items['blog']) ? unset($items['blog']) : NULL;

解析错误:语法错误,意外的 T_UNSET

【问题讨论】:

  • 错误表明,T_UNSET(即unset 的标记)在该行是意外的。这意味着你不能把它放在那里。就这样。删除它,你就没事了。这与三元运算符 btw 没有太大关系。

标签: php ternary-operator unset


【解决方案1】:

只是关于基准问题的建议:仅当您必须在视图中或确实需要一行代码时才使用三元语法;因此 if else 运算符要快得多

【讨论】:

  • 有趣;您是否对此进行了测试或只是注意到了差异?这也太糟糕了,并不是说三元组比 if/else 更容易阅读,但我喜欢它的便利性。
【解决方案2】:

错误显示,T_UNSET(即unsettokenDocs)在该行出乎意料。这意味着你不能把它放在那里。就这样。删除它就可以了:

unset($items['blog']);

顺便说一句,这与三元运算符没有太大关系,并且正如代码示例所示,无论如何您都不需要 unset 的运算符。

如果你非常喜欢三元运算符,你可以评估 unset:

isset($items['blog']) ? eval('unset($items[\'blog\'])') : NULL;

但这不是一个严肃的建议,因为不是很直接。

【讨论】:

    【解决方案3】:

    @Bryan 指出,在三元运算符中没有对语言结构的 function 调用。由于这里根本不涉及返回值,因此只需执行以下操作:

    unset($items['blog']);
    

    无需事先检查该值是否已设置。如果不是,unset 根本不会做任何事情。

    【讨论】:

    • 三元运算符的函数调用没有问题。但 unset 不是函数,而是一种语言结构。这就是为什么它不起作用。但是,您的建议仍然是代码方面的最佳建议,只是不是正确的解释。
    • @hakre 我知道你编辑了另一篇文章,但我不能@你,因为你没有在那里发表评论。请注意,iffor 不是语言结构。构造的完整列表是此页面上的第三类保留字:php.net/manual/en/reserved.keywords.php
    • @PaulP.R.O.:我对这里的语言结构有更轻松的看法,我认为iffor 的示例更好。因为:isset 确实有效:codepad.org/MCSHpbTG
    • @hakre 这很有趣。我很惊讶 isset 不会导致另一个错误。也许是因为它是一种返回布尔值的语言结构,以防你想嵌套三元 isset 测试。
    • @hakre 这并不能解释为什么你不能在三元运算符中使用它,但可以使用 isset。我刚刚发现了这一点:ca2.php.net/manual/en/language.expressions.php 对此进行了解释。表达式是“任何有价值的东西”。 unset 就像 echo 没有返回值。所以它们不能在那里使用,因为需要一个表达式。那里可以使用任何函数,也可以使用一些返回值的语言结构。
    【解决方案4】:

    您不能在三元运算中使用 unset,因为它不是可以运算的表达式。它是一种语言结构(如issetecho),不能放在那里。

    只要使用它就可以了,不需要任何决定:

    unset($items['blog']);
    

    【讨论】:

    • 附加说明,您实际上甚至不需要 if 语句。如果密钥不存在, unset($items['blog']) 不会返回错误,这可能是你最好的选择:)
    • 这不是真的。您可以在三元运算符中运行一个函数:codepad.org/X5bDeXwb
    • 没错,unset 不是函数,而是运算符。
    猜你喜欢
    • 2019-01-04
    • 2017-07-06
    • 2021-06-12
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多