Heim > Backend-Entwicklung > PHP-Tutorial > Warum führen ternäre Operatoren und String-Verkettung zu unerwünschten Ergebnissen?

Warum führen ternäre Operatoren und String-Verkettung zu unerwünschten Ergebnissen?

Patricia Arquette
Freigeben: 2024-10-24 05:12:01
Original
1027 Leute haben es durchsucht

Why Do Ternary Operator and String Concatenation Produce Unwanted Results?

Ternärer Operator und String-Verkettungsverhalten

In der Programmierung bietet der ternäre Operator (?) eine prägnante Möglichkeit, Bedingungen auszuwerten und Werte zuzuweisen. Bestimmte Nuancen in Verbindung mit der Zeichenfolgenverkettung können jedoch zu unerwartetem Verhalten führen.

Beachten Sie den folgenden Codeausschnitt:

<code class="php">$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';</code>
Nach dem Login kopieren

Das Ziel hier ist, eine andere Beschreibung basierend auf dem Wert von zuzuweisen $paperType. Wenn $paperType gleich „bond“ ist, sollte $description „Paper: Bond“ lauten. Andernfalls sollte es „Papier: Andere“ lauten.

Das tatsächliche Ergebnis weicht jedoch von dem ab, was beabsichtigt war. Anstatt das Präfix „Paper:“ anzuhängen, wird nur „Bond“ oder „Other“ zurückgegeben.

Um zu verstehen, warum dies geschieht, schlüsseln wir den Code auf:

<code class="php">($paperType == 'bond') ? 'Bond' : 'Other'</code>
Nach dem Login kopieren

Dieser Ausdruck wertet die Bedingung $paperType == 'bond' aus. Wenn „true“, wird „Bond“ zurückgegeben. Bei „false“ wird „Other“ zurückgegeben.

Im Originalcode ist dieser Ausdruck direkt mit der Zeichenfolge „Paper:“ verkettet.

<code class="php">'Paper: ' . (condition ? 'Bond' : 'Other')</code>
Nach dem Login kopieren

Das Problem tritt auf, weil die Zeichenfolge „Paper : ' wird mit dem Ergebnis des ternären Ausdrucks verkettet, nicht mit der Bedingung selbst. Wenn also $paperType gleich „bond“ ist, ist das Ergebnis „Bond“, das mit einer leeren Zeichenfolge (aufgrund des abschließenden Doppelpunkts) verkettet wird und „Bond“ ergibt.

Um das beabsichtigte Verhalten zu erreichen, muss die Die Zeichenfolgenverkettung sollte in Klammern eingeschlossen werden:

<code class="php">$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass die Zeichenfolge „Paper:“ mit dem ausgewerteten ternären Ausdruck verkettet wird, was zu den korrekten Werten führt: „Paper: Bond“, wenn $paperType „“ ist. andernfalls „Papier: Sonstiges“.

Das obige ist der detaillierte Inhalt vonWarum führen ternäre Operatoren und String-Verkettung zu unerwünschten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage