Untypisierte Variablen und logische Verknüpfungen

Ich habe mal wieder ein klassisches Beispiel für Probleme, die Auftreten können, wenn Variablen in einer Programmiersprache nicht sauber typisiert sind:

$x = 255; $y = 96;
echo $x, ' OR ', $y, ' => ', ($x | $y);

Die beiden Variablen werden ODER-Verknüpft. Das Ergebnis ist wie zu erwarten…

255 OR 96 => 255

Was aber, wenn die beiden Werte bei der Zuweisung keine „Zahlen“, sondern Zeichenketten waren?

$x = '255'; $y = '96';
echo $x, ' OR ', $y, ' => ', ($x | $y);

Überraschung:

255 OR 96 => ;75

Und auf ein mal funktioniert der ansonsten durchdachteste Algorithmus nicht mehr. Deshalb lieber immer mit Typecast arbeiten:

$x = '255'; $y = '96';
echo $x, ' OR ', $y, ' => ', ((int) $x | (int) $y);

Null und nichts in PHP

Vielleicht interessant für den einen oder anderen, dem dadurch die eine oder andere Minute Debuggen erspart bleibt…

Ich bin gerade einem seltsamen Phänomen in einem meiner Scripte nachgegangen. Eine meiner Variablen schien einfach zu verschwinden, dabei sollten nur die Variablen ohne Inhalt ignoriert werden.

Pustekuchen:

$x = 0;
if ($x == '') echo 'leer';

Dieses kleine Stückchen PHP-Programmcode spuckt tatsächlich „leer“ aus, obwohl ich vorher eine 0 in $x gefüllt habe. Der richtige Weg, um zu überprüfen, ob eine Variable einen leeren String enthält, ist also

$x = 0;
if ($x === '') echo 'leer';