2010-10-27 2 views
4
for(;;) 
    { 
    if(!$monitor->Throttle($cause)) 
     die('Fatal error: '.$monitor->error); 

    if($cause == THROTTLE_CAUSE_NONE) 
     break; 

    sleep(60); 
    } 

Я начинающий разработчик php. Итак, как вы читаете синтаксис «for» в предыдущем коде. действительно ли это?Что такое синтаксис for (;;) в этом коде?

я получил их от http://www.phpclasses.org/blog/post/132-Accelerate-Page-Accesses-Throttling-Background-Tasks-Unusual-Site-Speedup-Techniques-Part-2.html

ответ

13

for(;;) является C идиома, что означает «сделать навсегда», бесконечный цикл. Этот цикл будет завершен, только если оператор die срабатывает (насильственно), или причина установлена ​​в THROTTLE_CAUSE_NONE (не так сильно).

Это петля for без предварительных настроек, без условий и не после итераций, фактически так же, как while true (псевдокод).

4

for(;;) в основном бесконечный цикл, не более :)

7

Это навсегда петлю.

+0

+1 для игры на словах: P – BoltClock

+0

@BoltCLock Я рад, по крайней мере, кто-то его узнал. – joni

3

Действительно. Он создает бесконечный цикл, который в этом случае будет разбит, когда/если выполняется оператор разрыва, то есть if($cause == THROTTLE_CAUSE_NONE)

4

Ugh.

Это действительный синтаксис, он создает бесконечный цикл. Но это уродливо.

Гораздо более красивый способ сделать это было бы

while ($cause = $monitor->Throttle($cause) != THROTTLE_CAUSE_NONE) 
{ 
    if(!$cause) 
    die('Fatal error: '.$monitor->error); 

    sleep(60); 
} 
2

для цикла состоит из четырех частей:

for(initialization; exit condition; step) { body; } 

Ваш цикл не имеет ни одного из них, так что без условия выхода он будет просто работать вечно, пока он не достигнет «перерыв» предложение:

if($cause == THROTTLE_CAUSE_NONE) 
    break; 

Эквивалентных бы:

while(True) { ... } 
Смежные вопросы