Rolf B: Wie treibe ich php dieses warning aus?

Beitrag lesen

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 gewesen.

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 1erhalten, 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