Die if-Anweisung funktioniert in PHP nicht für false

7

Beim Versuch, sich mit if statement in PHP vertraut zu machen, ist dies passiert. Zum ersten Mal habe ich diesen Code unten versucht.

%Vor%

Und die Ausgabe war true , wenn die Bedingung true ist. Wenn die Bedingung false ( if(false) ) lautet, wird wieder false angezeigt.

Aber ich habe das gleiche versucht, indem ich eine Variable als Bedingung verwende, während ich den Wert der Variablen ändere.

%Vor%

In dieser Situation ist die Ausgabe true , auch wenn der Variablenwert false oder true ist. Gleichzeitig funktioniert if statement gut, wenn 1 und 0 anstelle von true und false verwendet wird. Warum passiert das?

    
DScript 23.06.2015, 06:47
quelle

10 Antworten

6

PHP macht einige hinterhältige Dinge im if-Ausdruck. Die folgenden Werte werden als FALSE betrachtet:

  • der boolesche FALSE selbst
  • die ganze Zahl 0 (null)
  • der Gleitkommawert 0.0 (null)
  • die leere Zeichenfolge und die Zeichenfolge "0"
  • ein Array mit null Elementen
  • ein Objekt mit null Membervariablen (nur PHP 4)
  • der spezielle Typ NULL (einschließlich nicht gesetzter Variablen)
  • SimpleXML-Objekte, die aus leeren Tags erstellt wurden

Jeder andere Wert wird als TRUE (einschließlich einer Ressource) betrachtet.

Sie übergeben tatsächlich eine Zeichenfolge, die das Wort "false" enthält, und nicht den Wert "false". Da dies nicht in der obigen Liste ist, wird es tatsächlich als wahr betrachtet!

    
Luke 23.06.2015, 06:52
quelle
9
%Vor%

Das 'false' ist eine gültige Zeichenfolge, die nicht Boolean FALSE ist, genau wie $con='hi'; nicht.

%Vor%

Um aus dem Handbuch

zu zitieren
  

Um ein boolesches Literal anzugeben, verwenden Sie die Konstanten TRUE oder FALSE. Beide sind case-insensitive.

Lesen Sie auch diese anderen Optionen, die Sie haben

  

Bei der Konvertierung in boolean werden die folgenden Werte als FALSE betrachtet:

     

◦ der boolesche FALSE selbst
  ◦ die ganze Zahl 0 (null)
  ◦ der Float 0.0 (Null)
  ◦ die leere Zeichenfolge und die Zeichenfolge "0"
  ◦ ein Array mit Nullelementen
  ◦ ein Objekt mit null Membervariablen (nur PHP 4)
  ◦ der spezielle Typ NULL (einschließlich nicht gesetzter Variablen)
  ◦ SimpleXML-Objekte, die aus leeren Tags erstellt wurden

Dann hast du das beobachtet

  

Gleichzeitig funktioniert die if-Anweisung gut, wenn 1 und 0 anstelle von wahr und falsch verwendet werden. Warum passiert das?

Dies liegt daran, dass 0 in irgendeiner Form FALSE ist, entweder String oder numerisch. Aber der Text false als String ist aus den oben genannten Gründen nicht falsch.

Lesen Sie auch über PHP Strenge Vergleiche , da Sie gerade lernen, weil

%Vor%     
Hanky Panky 23.06.2015 06:49
quelle
3
  

Wie im Abschnitt über Ausdrücke beschrieben, wird Ausdruck auf seinen booleschen Wert ausgewertet. Wenn der Ausdruck TRUE ergibt, führt PHP eine Anweisung aus, und wenn sie als FALSE ausgewertet wird, wird sie ignoriert. Weitere Informationen darüber, welche Werte zu FALSE ausgewertet werden, finden Sie in der 'Umwandlung in booleschen' Abschnitt.

So wie in der Dokumentation versuchen Sie es mit

%Vor%
  

Bei der Konvertierung in boolean werden die folgenden Werte als FALSE betrachtet:

     

◦ der boolesche FALSE selbst
  ◦ die ganze Zahl 0 (null)
  ◦ der Float 0.0 (Null)
  ◦ die leere Zeichenfolge und die Zeichenfolge "0"
  ◦ ein Array mit Nullelementen
  ◦ ein Objekt mit null Membervariablen (nur PHP 4)
  ◦ der spezielle Typ NULL (einschließlich nicht gesetzter Variablen)
  ◦ SimpleXML-Objekte, die aus leeren Tags erstellt wurden

Dokumente prüfen (IF MANUAL)

    
Narendrasingh Sisodia 23.06.2015 06:52
quelle
3

Sie verwenden 'false' als STRING Variable, aber das ist das WORD false, nicht die BOOLEAN Konstante. Verwenden Sie einfach false

%Vor%

Und wenn Sie if-Anweisungen machen, wird dies funktionieren:

%Vor%

oder Sie können a === verwenden, die einen Ausdruck mit einem anderen nach Wert und nach Typ vergleicht.

%Vor%     
Matth3w 23.06.2015 06:53
quelle
3

Verwenden Sie eine Bool anstelle einer Zeichenfolge:

%Vor%

Ihre if-Anweisung überprüft einfach, ob $ con nicht leer ist. In Ihrem Beispiel wird es also immer wahr sein.

    
Luke Benting 23.06.2015 06:50
quelle
2

Sie können einer solchen Variablen einen Wert zuweisen

%Vor%     
Mukesh Kalgude 23.06.2015 06:49
quelle
2

In Ihrem zweiten Beispiel ist $con nicht die boolesche false , es ist ein Zeichenfolgenliteral 'false' (notieren Sie die Anführungszeichen), und jede nicht leere Zeichenfolge in PHP wird als ausgewertet true .

Um das Problem zu beheben, löschen Sie einfach die Anführungszeichen:

%Vor%     
Mureinik 23.06.2015 06:50
quelle
2

Ihre $ con-Deklaration ist eine Zeichenfolge, die nicht bool ist. So wird es immer wieder wahr werden. Um einen booleschen Wert zu deklarieren, benutze:

%Vor%     
Diwas 23.06.2015 06:53
quelle
2

'false' ist nicht dasselbe wie false .

if('true') oder if('false') ergeben immer true , da sie als string s behandelt werden und zum Vergleich konvertiert werden.

%Vor%

Gibt false

aus     
Sougata Bose 23.06.2015 06:50
quelle
1

Ändere den Wert deiner Variablen auf diesen

%Vor%     
knives22 23.06.2015 06:55
quelle

Tags und Links