【问题标题】:PHP short if behavior [duplicate]PHP简短的if行为[重复]
【发布时间】:2012-07-07 01:09:43
【问题描述】:

可能重复:
How can I understand nested ?: operators in PHP?

为什么会这样:

  $object->customer->phone =
          ! empty( $object->customer->address->phone_fixed ) ?
                    $object->customer->address->phone_fixed :
          ! empty( $object->customer->address->phone_mobile ) ?
                    $object->customer->address->phone_mobile :
          ! empty( $object->customer->address->phone_business ) ?
                    $object->customer->address->phone_business : '';

返回$object->customer->address->phone_business,即使$object->customer->address->phone_fixed 已设置且不为空?

谢谢。

【问题讨论】:

  • 短 if 语法是左结合

标签: php if-statement short


【解决方案1】:

这就是为什么对这种复杂的赋值使用三元运算符不是一个好主意。但是,每当我嵌套三元运算时,我总是将每个运算括在括号中以确保确定。

我建议使用多个 if/elseswitch 语句。

if (!empty($object->customer->address->phone_fixed)
    $object->customer->phone = $object->customer->address->phone_fixed;
elseif (!empty($object->customer->address->phone_mobile)
    $object->customer->phone = $object->customer->address->phone_mobile;
elseif (!empty($object->customer->address->phone_business)
    $object->customer->phone = $object->customer->address->phone_business;

【讨论】:

    【解决方案2】:

    这与三元运算符的结合性有关。我会至少在您的代码中添加括号;但老实说......在一个单一的声明中不止一个三元是现代的失礼。 Interesting link

    【讨论】:

    • +1 不错,有趣的链接。忘了PHP Sadness
    • 谢谢,我用 if/elseif 重构了。
    【解决方案3】:

    要么你的数据不是你想的那样(调试才能看到),要么你的逻辑是错误的。

    虽然这个 short if (ternary operator) 非常适合 simple 内联赋值,但我鼓励您将其重构为 if/else为清晰起见。

    我想一旦这样做,您的问题就会变得清晰。进而证明编写干净代码的意义。

    【讨论】:

    • -1 短 if 语法是左结合
    • 从未说过。您为什么不发布答案而不是投票给其他人。无论哪种方式,这都属于滥用代码,因此包含在您的逻辑错误 :)
    • 因为这是一个重复的问题,我已经在其他地方回答过。我不想复制粘贴我的答案,因为这也不具有建设性。 SO 希望一个问题在网站上只回答一次。
    • 那么您应该留下带有指向该特定主题的链接的评论,而不是简单地在该主题中随波逐流的回答,并附上反对意见以获得完全合法和适当的答案。拒绝其他人就问题相关内容提供指导和建议的努力是不礼貌的。为了公平起见,我对这个答案的明确 +1。
    • @Mihai Stancu,了解重复。我已经结束了很多这样的问题。但是,我不相信反对投票。尤其是当答案既不正确也不具有误导性时。
    【解决方案4】:

    很可能变量不包含您认为它们所做的事情,请使用 var_dump 并进行一些调试。

    我什至不知道你可以使用简短的行为来做 elseif。如果我是你,我会重写那段代码以使其更具可读性/可靠性/可预测性等。

    在我看来,简单地写几个 if 会更好看,任何阅读代码的人都会立即理解。

    // 抱歉没有回答问题。

    【讨论】:

    • -1 短 if 语法是左结合
    • 我的意思是你没有努力真正回答这个问题。您只是提供有关如何处理和避免这种情况的建议。这应该是评论而不是答案。
    • 我的意思是你关于左关联性的观点,没关系。
    猜你喜欢
    • 2017-01-14
    • 2020-08-10
    • 1970-01-01
    • 2011-05-26
    • 2018-07-24
    • 2013-06-04
    • 2021-05-16
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多