am 26. Januar 2009
Nein, dass wird kein Frauen und Softwareentwicklung Artikel. Es geht um eine ganz andere, technische Gleichheit. Und zwar geht es um “==”. Ich gehe jetzt mal davon aus, dass die meisten von euch diesen Vergleichsoperator einsetzt, wenn er PHP programmiert. Es ist der Standard und ich tippe mal drauf, dass ein paar PHP Entwickler “===” noch nie eingesetzt haben.
Für Äquivalzenzrelationen in der Mathematik, wie zum Beispiel die Gleicheitsrelation, gelten drei Regeln:
- Reflexivität: a = a
- Symmetrie: a = b daraus folgt b = a
- Transitivität: a = b und b = c daraus folgt a = c
Die Regeln klingen sehr mathematisch, aber eigentlich ganz intuitiv. Einfach mal mit ein paar Zahlen durchprobieren. Aber diese Regeln gelten nicht für PHP und “==”, auch wenn man das eigentlich denken würde. Nehmen wir einfach mal ein Beispiel.
$a = 'hallo';
$b = 'hallo';
$c = 'hallo';
- $a == $a
- $a == $b und $b == $a
- $a == $b und $b == $c daraus folgt $a == $c
Stimmt also alles. Das gilt aber nur, solange die Variablen vom gleichen Typ sind. Schauen wir uns das Ganze mal für gemischte Typen an.
$a = 0;
$b = "hallo";
$c = "tschüss";
- $a == $a, stimmt
- $a == $b, stimmt auch in PHP
- $b == $a und $a == $c stimmt beides, nur leider stimmt $b == $c nicht
Jemand, der ein gewisses mathematisches Grundwissen besitzt, wird dies vielleicht ein wenig verwundern, da es nicht ganz intuitiv ist.
Falls man also sicherstellen will, dass man mit einer Äquivalenzrelation hantiert, sollte man den “===” Operator verwenden, denn für diesen gelten alle drei Regeln, da er auch den Typen der Variablen mit einbezieht. Ich habe diesen Artikel zwar unter “wtf” einsortiert, aber wenn man es weiß, dann ist dieses Verhalten nicht ganz so verwirrend. Es vereinfacht das Vergleichen in vielen Fällen ungemein, da man nicht erst auf den richtigen Typen casten muss. Zum “wtf” wird es dann erst, wenn man zwei Dinge vergleicht, die intuitiv unterschiedlich, aber laut PHP doch gleich sind. Ich denke jeder von euch stand schon einmal vor so einem Problem.