2009-08-23 10 views
41

Witam Po prostu chcę wiedzieć, dlaczego ten kod przynosi (przynajmniej dla mnie) niepoprawny wynik.Ternary operator i dziwactwo ciągów znaków?

No, chyba, że ​​jestem w winy tutaj

$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other'; 

ja domyślam się, że jeśli paperType równa „Bonda” następnie opis jest „Papier: Bond” i jeśli paperType nie jest równa „Bond” następnie opis to "Papier: inne".

Ale kiedy uruchomię ten kod, wyniki są opisami: "Bond" lub "Inne" i zostawiłem mi zastanawiasz się, gdzie napis "Paper:" poszło ???

Odpowiedz

76
$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other'); 

Spróbuj dodać nawiasy, aby ciąg był łączony z ciągiem we właściwej kolejności.

+0

Tak, to działa, więc jest operatorem problemem pierwszeństwo w moim kodu, wstyd na mnie; ~) – Cesar

+1

Ale ja naprawdę nie w pełni rozumie co dzieje ... – Cesar

+1

' Paper: "jest po raz pierwszy stosowany do wartości boolowskiej (wynik $ paperType ==" bond "), innymi słowy kod nie dzieje się we właściwej kolejności. –

8

Jest to związane z priorytetem operatora. Trzeba wykonać następujące czynności:

$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');