Wie treibe ich php dieses warning aus?
bearbeitet von
Hallo Jörg,
Ausführungsreihenfolge nach Priorität:
1. !
2. &&
3. !=
4. ??
Nein. Das ist sie nicht ganz. `!=` hat eine höhere Priorität als `&&`, damit Du Ausdrücke schreiben kannst wie `$a != 3 && b != 4`, ohne klammern zu müssen.
So rum ist es richtig:
1. !
2. !=
3. &&
4. ??
Und ich schnuppere ein Mistverständnis bei Dir, denn Du schriebst:
> Das Einzige, was ich dann komisch finde, ist, dass auch die gekürzte Version funktioniert, obwohl doch das ! in der Priorität vor dem && steht?
Das ! steht auf Rang 1. Und Rang 1 bedeutet: Höchster Rang. Wird zuerst ausgeführt.
Das `??` ist **am niedrigsten**, deshalb wird das `!=` hinter dem `?? null` Part zuerst ausgeführt und damit sagst Du, dass `TRUE` einzusetzen ist, nämlich `null != 1`, wenn der Teil links vom `??` undefiniert ist. Das ist einer der Fehler.
Und dann ist `&&` ebenfalls höher als `??`, deswegen wird der ganze Klumpatsch links vom ?? ausgeführt, bevor er sich das `??` anschaut. Er möchte also `!isset($_POST...) && $myGET['blah']` bestimmen, bevor er sich dem `??` zuwendet, und deswegen mault er rum, dass er `'blah'` in `$myGET` nicht findet.
Du möchtest:
1. `isset` aufrufen und das Ergebnis negieren (das !)
2. `$myGET['blah'] bestimmen und 1 erhalten, wenn `'blah'` nicht vorhanden ist (das ??)
3. Testen, ob das Ergebnis von (2) ungleich 1 ist
4. Die Ergebnisse von 1 und 3 mit `&&` verknüpfen
Das hast Du in deinem "du meinst diese hier" Beispiel sehr schön geklammert und danach auch sehr schön die Klammern, die wegen der Operatorenrangfolge unnötig sind, wieder entfernt.
_Rolf_
--
sumpsi - posui - obstruxi