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);