【问题标题】:Javascript-like || in php [closed]类 Javascript ||在 php [关闭]
【发布时间】:2014-02-26 13:01:21
【问题描述】:

javascript,我可以使用,例如这样的语句:

window.foo = window.foo || [];

如果没有window.foo,它将被分配到数组中,但不会转换为boolean

但是如果我在php 中做这样的事情,我会得到truefalse。 (例如,boolean 结果,不是等于true 值的变量)

为什么会存在这样的差异?

PS问题不在于使用什么,而是在于为什么使用它。

【问题讨论】:

  • @k102 我知道并使用它,尤其是短格式?:,只是想知道语言之间的区别
  • “为什么会有差异?” - 因为这两种语言以两种不同的方式实现逻辑或运算符。这是不同的。因为不一样。
  • 不一样,因为不一样。如果没有差异,那么每种语言都是一样的。
  • 问为什么 PHP 以它的方式做某事通常是个坏主意。答案通常很可怕。
  • @Wobble 为什么 PHP 实现逻辑或运算符来返回一个布尔值,就像,哦,我不知道,大多数其他语言?!

标签: javascript php


【解决方案1】:

不同之处在于运算符返回的内容。在 PHP 中,逻辑运算符返回布尔值。在 JavaScript 中,逻辑运算符返回实际的操作数,并在上下文需要时依靠隐式转换将它们转换为布尔值。

如果您想要在 PHP 中返回第一个操作数的计算结果为 TRUE,否则返回最后一个操作数的功能,您可以使用三元运算符的简写形式 (?:):

PHP.net 说:

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

【讨论】:

  • 我一直对改进自己以及我当前和未来的答案很感兴趣,因此欢迎在 -1 旁边留下评论。
  • 我没有投反对票,但可以为这样的声明“返回第一个操作数,如果它是好的”。我不了解 PHP,但我怀疑是否存在“OK”概念;)
  • @plalx 感谢您的评论。我认为来自 PHP.net 的引用会给出足够准确的答案,并允许更非正式的定义。重新阅读后,我意识到非正式并没有添加任何内容,所以我根据您的建议进行了修复。
猜你喜欢
  • 2012-05-04
  • 2015-06-27
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多