Tom: prüfen ob variable zeichen enthält...

Beitrag lesen

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