Về cơ bản thông dịch viên đánh giá biểu thức này từ trái sang phải, vì vậy:
echo $test == 'one' ? 'one' : $test == 'two' ? 'two' : 'three';
được hiểu như là
echo ($test == 'one' ? 'one' : $test == 'two') ? 'two' : 'three';
Và biểu hiện trong paratheses để đánh giá đúng, vì cả hai 'one' và 'hai 'không phải là null/o/hình thức sai khác. Vì vậy, nếu nó trông giống như:
echo $test == 'one' ? FALSE : $test == 'two' ? 'two' : 'three';
Nó sẽ in ba. Để làm cho nó hoạt động tốt, bạn nên quên kết hợp các toán tử bậc ba và sử dụng ifs/switch thông thường cho logic phức tạp hơn, hoặc ít nhất là sử dụng dấu ngoặc, cho trình thông dịch hiểu logic của bạn và không thực hiện kiểm tra theo cách LTR chuẩn:
echo $test == 'one' ? 'one' : ($test == 'two' ? 'two' : ($test == 'three' ? 'three' : 'four'));
//etc... It's not the most understandable code...
//You better use:
if($test == 'one')
echo 'one';
else { //or elseif()
...
}
//Or:
switch($test) {
case 'one':
echo 'one';
break;
case 'two':
echo 'two';
break;
//and so on...
}
Nguồn
2010-04-17 14:41:59
oh my ... đôi mắt của tôi ... được đốt .... nó không thể là vô hình ... –
đó là không tệ lắm. Trong các ngôn ngữ khác, đây sẽ là một thành ngữ. Trong PHP, nhờ vào sự kết hợp nhà điều hành kém được lựa chọn của nó, nó là một cái bẫy. – bobince
@bobince đã thử nó bằng các ngôn ngữ khác hoặc bạn chỉ giả định – nik