phpbar.de logo

Mailinglisten-Archive

[php] Was stimmt mit meiner if(or) Anweisung nicht?

[php] Was stimmt mit meiner if(or) Anweisung nicht?

Yannik Hampe yannik at cipher-code.de
Die Jul 8 22:51:54 CEST 2008


Christian Knorr wrote:
> Hallo zusammen,

Hallo Christian,

du sagtest zwar, dass Problem sei gelöst, aber ich will dich hier mal 
vor zukünfitigen Problemen schützen ;-).
> 
> [CODE]
> if ( $_POST["cancel_to_product"] or $ProduktMenu == "1" ) {

Dies funktioniert. Aber nicht aus dem Grund aus dem du denkst, dass es 
funktioniert (ansonsten hättest du das anders geschrieben).
Das ganze wird vielleicht deutlich, wenn ich ein paar optionale Klammern 
setze, die deine Anweisung nicht (!) verändern:

if (($_POST["cancel_to_product"] or $ProduktMenu) == "1" )

hättest du das gedacht? Ich schätze mal eher du dachtest, dass deine 
Anweisung equivalent mit dieser hier ist:

if ( $_POST["cancel_to_product"] or ($ProduktMenu == "1"))

Der Fehler fängt dann an dich ans debuggen zu bringen, wenn du auf 
einmal sowas hast:

if ( $_POST["cancel_to_product"] or $ProduktMenu == "0" )

Denn in dem Fall würde die if-Bedingung zum Beispiel nie wahr werden, 
wenn ($_POST["cancel_to_product"] ==true) wahr ist.

Bei php's ||-Zeichen ist das etwas anders:

if ( $_POST["cancel_to_product"] || $ProduktMenu == "1" )

ist tatsächlich genau wie

if ( $_POST["cancel_to_product"] or ($ProduktMenu == "1"))

das liegt daran, da das || eine höhere Priorität hat, als das or und 
auch eine höhere Priorität als das ==. Wie bei Punkt vor Strich, wo 
zuerst die Multiplikation errechnet wird (z.B.: in 5+3*4) wird das || 
vor dem == errechnet.

--> Entweder du machst dir bewusst, wie die Operatorreihenfolge in php 
aussieht, oder du setzt Klammern. Ansonsten entwickelt deine Anwendung 
mit der Zeit interessante neue "Features" :-D.

> Danke schonmal, Chris.....

Yannik

php::bar PHP Wiki   -   Listenarchive