2010-05-04 20 views
7

Von dem, was ich weiß, über PHP, die folgende Syntax ist nicht legal:PHP String-Vergleich ohne Anführungszeichen

if ($s == Yes) 

Es stattdessen geschrieben werden sollte:

if ($s == 'Yes') 

jedoch die erste Beispiel funktioniert gut. Wer weiß warum?

+0

Entwickeln Sie immer PHP mit ALLEN Fehlermeldungen. Alle unsichtbaren Hinweise verlangsamen Ihre Anwendung und machen sie für andere, die die Fehlerberichterstattung nicht deaktiviert haben, unbrauchbar. –

Antwort

13

Normalerweise würde es als eine Konstante interpretiert werden, aber wenn PHP nicht eine Konstante mit diesem Namen finden kann, dann nimmt es ein Stringliteral trotz der fehlenden Anführungszeichen zu sein. Dies erzeugt eine E_NOTICE-Nachricht (die möglicherweise nicht sichtbar ist, abhängig von Ihrer Fehlermeldungsstufe); so etwas wie:

Hinweis: Die Verwendung von undefinierter Konstante Ja - vorausgesetzt, Ja 'in script.php auf Linie 3

Grundsätzlich PHP nur allzu nachsichtig ist.

8

Kurz gesagt, PHP verhält sich so, als wären die Zitate da.

Wenn PHP etwas nicht als reserviertes Token erkennt, behandelt es es als String-Literal.

Das Fehlerprotokoll zeigt eine Warnung an.

1

Die erste ist keine Zeichenkette.

Und es ist nicht funktioniert:

error_reporting(E_ALL); 
if ($s == Yes) {} 

Es ist ein Erbe aus der Zeit, als PHP waren nur ein „Pretty Homepage“ Form Dolmetscher und stark heute abgeraten.

0

In PHP würde das ja als Konstante behandelt werden. Wenn die Konstante nicht definiert ist, wird davon ausgegangen, dass Sie die Zeichenfolge 'Ja' gemeint haben. Es sollte eine Benachrichtigung generieren, wenn Sie sie aktiviert haben.

1

Sie müssen sowohl error_reporting anzeigen, als auch display_errors aktiviert haben.

0

PHP konvertiert Ja intern zu "Ja", wenn die Konstante Ja nicht definiert ist.

Btw .. Wenn das, was Sie wollen, ist zu vergleichen, wenn $ s hat „Ja“ als Wert ein ein String ist, dann haben Sie zu

a) verwenden strcmp oder b) die Identität des Bedieners „=== "

Verwandte Themen