Veröffentlicht 7. Januar 20214 j Hallo, ich verstehe eine Aussage nicht. Ausgangssituation: $z1: 10 $z2: 10 $s1: "10" $ergebnis c= $z1 === $z2 and $s1 > 10 ergibt: bool(true) Ich habe mir es so erklärt, 10 ist identisch mit 10 -> TRUE. UND „10“ ist größer als 10 -> FALSE. Bei logisch UND ergibt dann TRUE FALSE = FALSE Warum gibt der Code TRUE aus? Was habe ich nicht bedacht? Oder wird die string 10 als 0 oder nichts gewertet? Dann wäre 10 größer. (???) Danke im Voraus. code: $z1 = 10; $z2 = 10; $s1 = "10"; // a) echo 'Ausgangssituation:<br />$z1: '; var_dump($z1); echo "<br />"; echo '$z2: '; var_dump($z1); echo "<br />"; echo '$s1: '; var_dump($s1); echo "<hr>"; .......... // c) echo "<hr>"; $ergebnis = $z1 === $z2 and $s1 > 10; echo 'Prüfung: $ergebnis c= $z1 === $z2 and $s1 > 10 ergibt: '; var_dump($ergebnis);
7. Januar 20214 j Autor Es muss wohl an der Rangfolge liegen, sodass nur der linke Ausdruck verarbeitet wird. (?!) Bearbeitet 7. Januar 20214 j von metalmeier
7. Januar 20214 j Ja, das liegt an der Operatorrangfolge. Der Zuweisungsoperator (=) ist höherrangig als and. D.h. er wird zuerst ausgeführt. Neben and gibt es ja noch &&. && ist höherwertiger als der Zuweisungsoperator. // Das Ergebnis des Ausdrucks (false && true) wird $e zugewiesen // Funktioniert wie: ($e = (false && true)) $e = false && true; // Die Konstante "false" wird $f zugewiesen bevor die "and" Operation durchgeführt wird // Funktioniert wie: (($e = false) and true) $f = false and true; In deinem Beispiel heißt es: ($ergebnis = $z1 === $z2) and $s1 > 10; D.h. $ergebnis hat nur das Resultat von $z1 === $z2. Der Rest verschwindet im Nirvana. Um wohl auf das gewollte Ergebnis zu kommen musst du and gegen && tauschen. https://www.php.net/manual/de/language.operators.precedence.php Bearbeitet 7. Januar 20214 j von Whiz-zarD
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.