Im Studium wird schwerpunktmässig Java durchgenommen. Dort erfahren wir momentan immer wieder so kleine Kniffs, welche das programmieren vereinfachen. Natürlich muss ich als PHP Fan immer wieder prüfen, ob sich diese Dinge auch in PHP so umsetzen lassen.
Heute befasse ich mich mit dem Thema logische Operatoren.
Beispiel 1
Im Beispiel sieht man, wie 2 Werte mit logischen && bzw. || Operatoren verknüpft werden.
Das spannende ist folgendes:
Bei && Operatoren, wird der 2. Operand (im Beispiel foo() ) nur zur Ausführung gebracht, wenn Operator 1 true ergibt.
Bei || Operatoren, wird der 2. Operand (Im Beispiel foo() ) nur zur Ausführung gebracht, wenn Operator 1 nicht true ist.
function foo() { echo 'foo() executed'; } // foo() wird nie aufgerufen $a = (false && foo()); $b = (true || foo()); $c = (false and foo()); $d = (true or foo());
Beispiel 2
Beispiel 1 kling zwar schön und gut, aber was bringt mir das?
Es kommt ja häufiger vor, dass Objekt baz als Membervariable von Objekt bar gespeichert wird. Will man nun auf baz über bar zugreifen, muss man zuerst prüfen, ob dieses Objekt überhaupt instanziert ist, ansonsten wird ein Fehler geworfen.
Wie im Beispiel ersichtlich, kann man die instance of Prüfung mit dem zweiten Funktionsaufruf problemlos mit && verknüpfen, da $bar->getBaz()->isBazActive() nur zur Ausführung gebracht wird, wenn $bar->getBaz() instanceof baz auch TRUE ist.
ini_set('display_errors', 1); class bar { private $baz; public function getBaz() { return $this->baz; } } class baz { public function isBazActive() { return true; } } $bar = new bar(); //Fatal Error if($bar->getBaz()->isBazActive()){ } //Alles ok if($bar->getBaz() instanceof baz && $bar->getBaz()->isBazActive()){ }