这是问题所在:
echo is_object($person->getCompany()) ? $person->getCompany()->getName() : 'test';
它让我“测试”。
echo 'Company: ' . PHP_EOL . is_object($person->getCompany()) ? $person->getCompany()->getName() : 'test';
它给我带来了错误
PHP致命错误:未捕获错误:在字符串上调用成员函数getName()
所以相同的代码,相同的变量,但第一次执行正确的部分(它不是一个对象),下次执行左边的部分?
之所以失败,是因为解析表达式的顺序。尝试在三元运算符周围使用括号:
echo 'Company: ' .
PHP_EOL .
(is_object($person->getCompany()) ? $person->getCompany()->getName() : 'test');
在第二种情况下,您的三元组的评估方式不同。
PHP正在检查'Company: ' . PHP_EOL . is_object($person->getCompany())
是否为TRUE或FALSE而不是is_object
。 is_object
结果会附加到您的字符串中,因为非空字符串始终为true,所以三元组的第一部分会被评估,从而导致您的错误。