我强烈建议不要使用嵌套三元运算符。正如您发现的那样,它们远非可读。在这里转换为正确的 if 语句肯定会使其更具可读性。我们可以先对其进行一些格式化以帮助分解它:
$cust->is_company() ?
'TekCustomer__'.($cust->getID() ? $cust->getID() : 'new'.($next_new_id-1)) :
'Person__'.($cust->people[0]->getID() ? $cust->people[0]->getID() : 'new'.$next_new_id++)
啊哈!它实际上并不像最初看起来那样可怕(尤其是由于 PHP 在嵌套三元组上的奇怪行为*)。
首先,它检查$cust->is_company()
并做两件事之一。这给了我们:
if($cust->is_company()){
'TekCustomer__'.($cust->getID() ? $cust->getID() : 'new'.($next_new_id-1));
}else{
'Person__'.($cust->people[0]->getID() ? $cust->people[0]->getID() : 'new'.$next_new_id++)
}
请注意,通常您会对这些值做一些事情。这将取决于表达式最初是如何使用的。
我将把内部三元作为练习留给读者!
*PHP 从左到右而不是从右到左解析嵌套的三元运算符。见http://php.net/manual/en/language.operators.comparison.php