我的代码中有嵌套的三元运算符,如下所示:
$error = $fault_all ? "ALL" : $fault_twothirds ? "TWOTHIRDS" : $fault_onethird ? "ONETHIRD" : "UNKNOWN";
echo 'STATEERROR: ' . $error . ';';
它们按照我的偏好从左到右的顺序列出,所以如果$ fault_all和$ fault_twothirds为真,我希望将“ALL”分配给$ error;如果所有这些都是真的,也是一样的。如果全部为假,则应将“UNKNOWN”分配给错误。
但是,如果其中任何一个为真,则仅返回“ONETHIRD”,如果返回所有错误的“UNKNOWN”。如何让“ALL”和“TWOTHIRDS”归还?
答案 0 :(得分:1)
我建议您使用(
和)
将不同的三元组分开,或使用if / else子句。
答案 1 :(得分:1)
在能够调试和管理状态列表方面,我建议停止使用三元数,这是不可读的,并使用开关,if-elseif语句,或者,如果您预期长列表,方法如下:
<?php
function state( $states ) {
foreach( $states as $state => $current ) {
if( $current ) {
return $state;
}
}
return 'UNKNOWN';
}
$states = array(
'ALL' => $fault_all,
'TWOTHIRDS' => $fault_twothirds,
'ONETHIRD' => $fault_onethird
);
var_dump( state( $states ) );
那就是说,这应该有效,我想:
<?php
$error = ( $fault_all ? "ALL" : ( $fault_twothirds ? "TWOTHIRDS" : ( $fault_onethird ? "ONETHIRD" : "UNKNOWN" ) ) );
答案 2 :(得分:1)
这是一个已知问题。 - veekun
例如以下嵌套的三元...
<?php
$arg = 'T';
$vehicle = ( ( $arg == 'B' ) ? 'bus' :
( $arg == 'A' ) ? 'airplane' :
( $arg == 'T' ) ? 'train' :
( $arg == 'C' ) ? 'car' :
( $arg == 'H' ) ? 'horse' :
'feet' );
echo $vehicle;
打印'horse'
正如@ berry-langerak所述,使用控制流功能......
使用对象{array,structure}更可靠... I.E.
$vehicle = (empty( $vehicle) ?
array(
'B' => 'Bus',
'A' => 'Airplane',
'T' => 'Train',
'C' => 'Car',
'H' => 'Horse',
):
NULL
);
$arg = 'T';
$vehicle = (! empty($arg) ? $vehicle[$arg] : "You have to define a vehicle type");
echo($vehicle);