PHP koşullu operatörü hata iç içe?

3 Cevap php
   
                return
                    true  ? 'a' :
                    false ? 'b' :
                                                           'c';

Bu 'a' dönmesi gerekir, ama öyle değil. Bunun yerine 'b' döndürür. Koşullu operatörlerin farklı bölümlerini ele PHP'nin sırayla bir hata var mı?

Düzgün çalışmıyor gibi görünüyor nerede http://stackoverflow.com/questions/1917718/are-multiple-conditional-operators-in-this-situation-a-good-idea fikrim var.

(Doğru ve yanlış tabii, örnek amaçlıdır. Gerçek kod içerisinde sırasıyla doğru ve yanlış olarak değerlendirmek ifadeler vardır. Evet, biliyorum emin için)

3 Cevap

It is recommended that you avoid "stacking" ternary expressions. PHP's behaviour when using more than one ternary operator within a single statement is non-obvious

From the PHP Manual "belirgin olmayan Üçlü Davranış" altında.

Bunu parantez eklemek sürece beklendiği gibi davranmasına değil yani Üçlü operatörleri, soldan sağa değerlendirilir. Aşağıdaki olsa işe yarayacağını

return (true ? "a" : (false ? "b" : "c"));

O (true ? 'a' : false) değerlendiren oluyor sanıyorum ikinci üçlü operatörü ve 'a' gerçek olarak yorumlamak için girdi olarak. Uygun braketi deneyin.

operasyonların sırası:

>>> return true ? 'a' : false ? 'b': 'c';
'b'
>>> return true ? 'a' : (false ? 'b': 'c');
'a'