for(;;) { if(!$monitor->Throttle($cause)) die('Fatal error: '.$monitor->error); if($cause == THROTTLE_CAUSE_NONE) break; sleep(60); }
Я начинающий разработчик php. Итак, как вы читаете синтаксис «for» в предыдущем коде. действительно ли это?
Я получил их от http://www.phpclasses.org/blog/post/132-Accelerate-Page-Accesses-Throttling-Background-Tasks-Unusual-Site-Speedup-Techniques-Part-2.html
for(;;)
является C-идиомой, которая означает «делать навсегда», бесконечный цикл. Этот цикл будет завершен только в том случае, если либо оператор die
срабатывает (яростно), либо причина установлена на THROTTLE_CAUSE_NONE
(не так сильно).
Это цикл цикла без предварительной настройки, без каких-либо условий, а не с пост-итерационными командами, фактически так же, как while true
(псевдокод).
Это бесконечный цикл.
for(;;)
– это в основном бесконечный цикл, не более 🙂
Тьфу.
Это допустимый синтаксис, он создает бесконечный цикл. Но это уродливо.
Гораздо более красивый способ сделать это
while ($cause = $monitor->Throttle($cause) != THROTTLE_CAUSE_NONE) { if(!$cause) die('Fatal error: '.$monitor->error); sleep(60); }
Это действительно. Он создает бесконечный цикл, который в этом случае будет разбит, когда / если выполняется оператор break, то есть if($cause == THROTTLE_CAUSE_NONE)
Цикл for состоит из четырех частей:
for(initialization; exit condition; step) { body; }
В вашем цикле нет ни одного из них, поэтому без условия выхода он будет запускаться вечно до тех пор, пока он не попадет в предложение «break»:
if($cause == THROTTLE_CAUSE_NONE) break;
Эквивалентом будет:
while(True) { ... }