Hello,
Die Funktion empty() liefert nämlich nur solange true, wie
- die Variable nicht vohanden ist ( isset() ist also inclusiv *gg*)
- Die Variable '' enthält
- Die Variable NULL enthält
- Die Variable false enthält <------
- ACHTUNG: die Variable 0 enthält.Empty() ist also nicht geeignet, numerische Variablen zu überprüfen, die als gültigen Wert
auch die 0 haben!--> Ich begebe mich jetzt in unsicheres Terrain, aber ich frage ja auch nicht, um darüber weiterzudiskutieren, sondern um etwas zu verstehen!
Ist das nicht ein Designfehler, daß empty bei false ein true liefert? Ist false in php nur der Ziffer 0 gleichwertig (also boolean kein "richtiger" Datentyp)?
Also bis jetzt hätte ich false als Wert angesehen und wundere mich daß empty dazu true sagt. Denn ein Boolean ist doch ein Wahrheitswert - und kann, so sah ich das bis jetzt, nie empty sein.
Mmmh: wie fang ich an?
Der boolesche Rückgabewert einer Funktion sollte erstmal von ihrem Namen abhängen, der tunlichst die Aufgabe der Funktion mnemonisch beschreiben sollte. Es würde dann in etwa gelten
___________
empty($var) = filled($var)
oder
____________
empty($var) = filled($var)
In PHP haben logische Variablen immer drei Zustände
- True
- False
- nicht benutzt (NULL)
dementsprechend haben skalare auch mehrere Eigenschaften
- Name
- Wert
- Typ
Man kann nun auch unterschiedliche Typen miteinander vergleichen
$logischerWert == $StringVariable
Der Operator == scheut hier nur nach, ob im String ein Wert > nichts, oder 0 vohanden ist und vergleicht das mit dem Eintrag im logischen Wert.
es gilt also
1 == 'inhalt' ==> true
Wenn man nun die automatische Typumwandlung ausschaltet und dadurch die übereinstimmung der Typen in die Überprüfung einbezieht, ergibt der obige Vergleich false. Das gescheiht durch Wechsel des Operators automatisch
1 === 'inhalt' ==> false
Darum muss man ja auch beispielsesie beim Scannen eines Verzeichnisses
while (false !== ($filename = readdir($dh)))
schreiben. Anderennfalls (while $filename = readdir($dh)) würde die Datei mjit dem Namen '0' die Schleife beenden.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau