Ich habe den folgenden Code in der Produktion, die eine Endlosschleife verursachen scheint.Verständnis der Operator Vorrang in PHP
$z=1;
while (!$apns = $this->getApns($streamContext) && $z < 11)
{
myerror_log("unable to conncect to apple. sleep for 2 seconds and try again");
$z++;
sleep(2);
}
Wie werden die Vorrangregeln angewendet, die dieses Verhalten verursachen?
http://php.net/manual/en/language.operators.precedence.php
Ich sehe diese Notiz in der Dokumentation:
Obwohl = hat eine niedrigere Priorität als die meisten anderen Betreiber, wird PHP noch Ausdrücke erlauben ähnlich der folgenden: if (! $ A = foo()), in In diesem Fall wird der Rückgabewert von foo() in $ a gesetzt.
Das lässt mich denken, dass das = zuerst ausgewertet werden sollte. dann ist die ! dann die & &, die keine Endlosschleife verursachen würde.
Haben Sie zu verwenden bedeutet '==' (Vergleich) statt ' = '(Zuweisung) in Ihrer while-Schleife? – vimist
nein, diese Aussage bedeutet wirklich nur, dass'! 'links von' = 'gültig ist. Das' && 'ist immer noch Teil des zugewiesenen Wertes. – Dave
auch: NO. SCHLECHT. Code nicht so. Es ist scheußlich. – Dave