Mam następujący kod w produkcji, który wydaje się być przyczyną nieskończonej pętli.Opis priorytetu operatorów w 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);
}
W jaki sposób stosowane są reguły pierwszeństwa, które powodują takie zachowanie?
http://php.net/manual/en/language.operators.precedence.php
widzę tę notatkę w docs:
Chociaż = ma niższy priorytet niż większość innych operatorów, PHP nadal pozwalają wyrażenia podobne do poniższego: if ($ a = foo()), w przypadku którego zwracana jest wartość foo() do $ a.
Który sprawia, że myślę, że = należy najpierw ocenić. a później ! następnie & &, który nie spowoduje nieskończonej pętli.
Czy chodziło Ci używać '==' (porównanie) zamiast ' = '(przypisanie) w pętli while? – vimist
nie, to polecenie naprawdę oznacza po prostu, że'! 'po lewej stronie' = 'jest poprawne.' && 'nadal jest częścią przypisywanej wartości – Dave
także: NIE. BARDZO Nie koduj tak, to jest ohydne – Dave