Frage

Hallo, ich möchte nur wissen, warum dieser Code Ausbeuten (zumindest für mich) ein falsches Ergebnis.

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 nicht zu ‚Bond‘ ist gleich dann Beschreibung ist ‚Papier: Andere‘.

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

War es hilfreich?

Lösung

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

Hinzufügen von Klammern, so dass die Zeichenfolge in eine Zeichenfolge in der richtigen Reihenfolge verknüpft werden.

Andere Tipps

Es ist mit Operatorpräzedenz verwendet. Sie müssen folgendes tun:

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

Ich denke, jeder der Lösung gab, würde Ich mag den Grund für das unerwartete Ergebnis beitragen.

Zu allererst hier können Sie die Herkunft überprüfen, und wie die Operatoren ausgewertet werden (links, rechts, assoziativ, etc.).

http://php.net/manual/fa/language.operators .precedence.php

Wenn wir nun analysieren Ihren Satz.

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

1) Wir überprüfen den Tisch und finden, dass die Klammern zuerst ausgewertet werden, dann die ‚‘ (Verkettung) ausgewertet und am Ende der ternäre Operator, daher konnten wir diese assoziieren wie folgt ‚?‘:

// evaluate the parenthesis ... ($ paperType == 'bond')
$ description = ('Paper:'. 1)? 'Bond': 'Other';
//result
$ description = 'Paper: 1'? 'Bond': 'Other';

2) Wir haben jetzt den ternären Operator haben, wissen wir, dass ein String ausgewertet wird "true"

// PHP-Dokumentation Wenn die Umwandlung nach boolean werden folgende Werte als FALSE:

... die leere Zeichenkette und die Zeichenkette „0“

$ description = true? 'Bond': 'Other';

3) Schließlich

$ description = 'bond';

Ich hoffe, ich habe die Frage geklärt. Grüße.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top