1

可能重复:
我如何理解嵌套的?: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已设置且不为空?

谢谢你。

4

4 回答 4

6

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

于 2012-07-06T14:52:32.553 回答
4

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

虽然这个简短的 if三元运算符)非常适合简单的内联赋值,但为了清楚起见,我鼓励您将其重构为if/else块。

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

于 2012-07-06T14:51:12.283 回答
1

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

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

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

// 抱歉没有回答这个问题。

于 2012-07-06T14:50:53.970 回答
1

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

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

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;
于 2012-07-06T14:59:50.860 回答