2009-08-23 5 views
41

Hi ich möchte nur wissen, warum dieser Code (zumindest für mich) ein falsches Ergebnis liefert.Ternäroperator und String-Verkettungsquirk?

Nun, wahrscheinlich ich bin in Schuld hier

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

Ich vermute, dass, wenn paperType gleich ‚Bond‘ dann Beschreibung ist ‚Papier: Bond‘ und wenn paperType ist gleich nicht zu ‚Bond‘ dann Beschreibung ist "Papier: Andere".

Aber wenn ich diesen Code ausführen die Ergebnisse sind Beschreibung ist entweder 'Bond' oder 'Andere' und ließ mich fragen, wo die Zeichenfolge 'Papier:' ging ???

Antwort

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

Versuchen Sie, Klammern hinzuzufügen, damit die Zeichenfolge in der richtigen Reihenfolge zu einer Zeichenfolge verkettet wird.

+0

Ja, es funktioniert, so ist ein Operator Vorrang Problem in meinem Code, Schande über mich; ~) – Cesar

+1

Aber ich wirklich nicht vollständig versteht, was geschieht ... – Cesar

+1

' Papier: 'wird zuerst auf einen booleschen Wert angewendet (das Ergebnis von $ paperType ==' bond '), mit anderen Worten, Code findet nicht in der richtigen Reihenfolge statt. –

8

Es hängt mit der Vorrangstellung des Operators zusammen. Sie müssen folgendes tun:

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