Verzeihen Sie, wenn der Titel nicht genau das entspricht, was ich frage, habe ich eine harte Zeit, die Frage genau zu beschreiben.Zusammengesetzte boolesche Ausdrücke in C/PHP und Variablenzuweisung
Betrachten Sie die folgende PHP-Code:
#!/usr/bin/php
<?php
class foo{
function bar()
{
return true;
}
}
if (true && $a = new foo() && $a->bar()) {
echo "true";
} else {
echo "false";
}
Es gibt
Fatal error: Call to a member function bar() on a non-object
für die a- $> bar(); Ausdruck.
Betrachten Sie die folgende C-Code:
int main(void)
{
int i = 0;
if (i += 1 && printf("%d\n", i))
{
printf("Done: %d.\n", i);
}
}
Es gibt:
0
Done: 1.
Warum ist das? Da C und PHP behaupten, diese Ausdrücke kurzzuschließen und von links nach rechts zu bewerten, erwarte ich, dass ein Wert, der in Ausdrücken nach links gesetzt ist, in Ausdrücken auf der rechten Seite verwendet wird. Gibt es etwas, das mir fehlt?
gleiche Quelle Problem für C. – AProgrammer
+1. Dasselbe passierte mit dem C-Codebeispiel. Wenn Sie i + = 1 in Klammern setzen, tut es was OP erwartet. – tsg
Son of a gun, Betreiber Vorrang nie kam mir in den Sinn. Ich habe immer gedacht, dass Zuweisungsoperationen eine ähnliche Priorität wie Vergleichsoperatoren haben. Ein kurzer Blick auf http://us3.php.net/manual/en/language.operators.precedence.php erinnerte mich daran, dass ich mich oft über große ... viele ... Dinge täusche. –