PHP: if (!$val) VS if (leer($val)). Gibt es einen Unterschied?

Lesezeit: 2 Minuten

Ich habe mich gefragt, was der Unterschied zwischen den beiden folgenden Fällen ist und welcher empfohlen wird?

$val = 0;

if (!$val) {
  //True
}

if (empty($val) {
  //It's also True
}

Shis Benutzeravatar
Schi

Schauen Sie sich die an Vergleichstabelle für PHP-Typen.

Wenn Sie die Tabelle überprüfen, werden Sie feststellen, dass für alle Fälle empty($x) ist das gleiche wie !$x. Es kommt also darauf an, mit nicht initialisierten Variablen umzugehen. !$x erstellt ein E_NOTICEwohingegen empty($x) nicht.

  • +1. Beachten Sie auch, dass dies dasselbe ist wie != [boolean result of evaluating $val]also ist die letzte Spalte der ersten Tabelle meistens das, was Sie sich ansehen sollten.

    – rockerest

    22. August 2011 um 0:16 Uhr

  • Danke, das musste ich wissen. Also denke ich, dass empty($x) der sicherere Ansatz ist. Ich nehme an, der Unterschied ist in Bezug auf die Leistung vernachlässigbar, oder?

    – Bachx

    22. August 2011 um 0:24 Uhr


  • Bitte beachten Sie, dass bei Verwendung von empty() auf unzugängliche Objekteigenschaften die __isset-Überladungsmethode aufgerufen wird, falls deklariert.

    – xdazz

    22. August 2011 um 2:03 Uhr

Wenn Sie empty verwenden und die Variable nie gesetzt/erstellt wurde, wird keine Warnung/kein Fehler ausgegeben.

Benutzeravatar von Felix Kling
Felix Klinge

Mal sehen:

empty Dokumentation:

Die folgenden Dinge gelten als empty:

  • "" (eine leere Zeichenfolge)
  • 0 (0 als ganze Zahl)
  • 0.0 (0 als Schwimmer)
  • "0" (0 als Schnur)
  • NULL
  • FALSE
  • array() (ein leeres Array)
  • var $var; (eine deklarierte Variable, aber ohne Wert in einer Klasse)

Boolesche Dokumentation:

Bei der Konvertierung in Boolean werden die folgenden Werte berücksichtigt FALSE:

  • der boolesche Wert FALSE selbst
  • die Ganzzahl 0 (Null)
  • der Schwimmer 0.0 (Null)
  • die leere Zeichenfolge und die Zeichenfolge "0"
  • ein Array mit null Elementen
  • ein Objekt mit null Mitgliedsvariablen (nur PHP 4)
  • der besondere Typ NULL (einschließlich nicht gesetzter Variablen)
  • SimpleXML Objekte, die aus leeren Tags erstellt wurden

Es scheint, dass der einzige Unterschied (in Bezug auf den resultierenden Wert) darin besteht, wie a SimpleXML Instanz behandelt wird. Alles andere scheint das gleiche Ergebnis zu liefern (wenn Sie natürlich die boolesche Umwandlung umkehren).

  • Also, was ist das Fazit? Aus der Liste scheint boolean die robustere Prüfung zu sein …

    – Jason McCreary

    22. August 2011 um 0:19 Uhr

  • Das ist falsch. Das verrät ein kurzer Test auf der PHP-Shell empty Griffe leer SimpleXMLElement Fälle wie ! tut; es ist einfach ein Fehler in der empty Dokumentation, dass sie dort nicht erwähnt werden.

    – Mark Amery

    7. Juni 2015 um 22:19 Uhr


  • Ich muss die Vervielfältigung von doc lieben.

    – Leonbloy

    23. Februar 2019 um 19:43 Uhr

1430330cookie-checkPHP: if (!$val) VS if (leer($val)). Gibt es einen Unterschied?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy