连接的is_object不能正常工作吗?

时间:2017-12-20 20:41:52

标签: php

问题在于:

  1. 当我写这个

    echo is_object($person->getCompany()) ? $person->getCompany()->getName() : 'test';
    
  2. 它返回我" test"。

    1. 但是当我写这个

      echo 'Company: ' . PHP_EOL . is_object($person->getCompany()) ? $person->getCompany()->getName() : 'test';
      
    2. 它返回错误

        

      PHP致命错误:未捕获错误:调用成员函数getName()   在字符串

      所以相同的代码,相同的变量,但第一次执行正确的部分(它不是一个对象),下次执行左边的部分?

2 个答案:

答案 0 :(得分:5)

在第二种情况下,您的三元评估方式不同。

PHP正在检查'Company: ' . PHP_EOL . is_object($person->getCompany())是否为TRUE或FALSE而不是is_objectis_object结果会附加到您的字符串中,因为非空字符串始终为true,所以您的三元组的第一部分会被评估,从而导致您的错误。

答案 1 :(得分:3)

由于解析表达式的顺序而导致失败的原因。尝试在三元运算符周围使用括号:

echo 'Company: ' . 
     PHP_EOL . 
     (is_object($person->getCompany()) ? $person->getCompany()->getName() : 'test');