Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung
166 Unwetterwarnungen in Deutschland
Die Datenbank wurde zuletzt um 24.09.2020 15:42:12 Uhr aktualiesiert

Kurzgeschlossene Verknüpfungsoperatoren

Um in if-Abfragen mehrere Bedingungen miteinander zu verknüpfen werden Verknüpfungsoperatoren verwendet. PHP bietet dafür AND, & und && bzw. OR, | und ||.

Dabei entsprechen AND und & sowie OR und | einander. && und || heißen kurzgeschlossene Operatoren.

Der Unterschied zwischen kurzgeschlossenen und einfachen Operatoren ist, dass bei einer „normalen“ Abfrage:

if($var1=="hallo" & $var2=="Welt") echo "ja";

sowohl die erste als auch die 2.Bedingung überprüft wird. Das bedeutet, auch wenn die erste Bedingung $var1==“hallo“ bereits false ist, wird die zweite Bedingung überprüft, obwohl da bereits feststeht, dass der Gesamtausdruck false wird.

Korrespondierend dazu eine ODER-Bedingung:

if($var1=="hallo" | $var2=="Welt")

Wenn die erste Bedingung true ist, wird die zweite trotzdem überprüft, obwohl bereits nach der ersten Überprüfung feststeht, dass der Ausdruck auf jeden Fall true wird.

Bei kurzgeschlossenen Operatoren ist dies anders: Sobald PHP bemerkt, dass der ganze Ausdruck gar nicht mehr true werden kann bzw. auf jeden Fall true wird, wird keine weitere Rechenzeit damit vergeudet, die restlichen Ausdrücke noch auszuwerten.

Mittlerweile muss dieser Tipp allerdings als Mythos genannt werden, denn PHP optimiert die Abfragen intern selbst und es entstehen keine Geschwindigkeitsunterschiede (unter PHP 5).

Erstmal gilt somit: Verknüpfungsoperatoren AND, & und && sowie OR, | und || sind gleich performant.

Datei Gesamtlaufzeit durchschnittliche Laufzeit pro Durchlauf Verhältnis zur schnellsten Variante
langgeschlossen.php 26,45 s 2,645 ms 100%
kurzgeschlossen.php 26,49 s 2,649 ms 100%

Die Verwendung von kurzgeschlossenen Operatoren hat aber andere Vorteile.
Wenn man nicht weiß, ob eine bestimmte Variable / ein Objekt existiert kann man zuerst abfragen, ob es existiert und danach dessen Wert überprüfen:

if(isset($arr) && in_array($value,$arr)) echo "true"; 

Beide Möglichkeiten stimmen logisch überein. Falls allerdings bei der zweiten Variante das Array nicht existiert, wird ein Fehler geworfen (Warning: Wrong datatype for second argument), da dann in_array() nicht ausgeführt werden kann. Bei der ersten Variante merkt der Interpreter, dass der Ausdruck nicht mehr true werden kann, weil $arr nicht gesetzt ist und setzt die Arbeit somit ohne Fehler fort.
Die erste Variante kann somit Quellcode gegenüber folgender Variante sparen:

if(isset($arr)) {   
if(in_array($value,$arr)) {  
...   
} 
}

Die kurzgeschlossene Variante hat also ihre Berechtigung, schneller ist sie allerdings nicht.