Что такое синтаксис for (;;) в этом коде? - PullRequest
4 голосов
/ 27 октября 2010
   for(;;)
   {
     if(!$monitor->Throttle($cause))
       die('Fatal error: '.$monitor->error);

     if($cause == THROTTLE_CAUSE_NONE)
       break;

     sleep(60);
   }

Я начинающий разработчик PHP.Итак, как вы читаете синтаксис «для» в предыдущем коде.это действительно?

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

Ответы [ 6 ]

13 голосов
/ 27 октября 2010

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

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

7 голосов
/ 27 октября 2010

Это вечный цикл.

4 голосов
/ 27 октября 2010

Тьфу.

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

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

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

    sleep(60);   
 }
4 голосов
/ 27 октября 2010

for(;;) по сути бесконечный цикл, не более того:)

3 голосов
/ 27 октября 2010

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

2 голосов
/ 27 октября 2010

Цикл for состоит из четырех частей:

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

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

if($cause == THROTTLE_CAUSE_NONE)
  break;

Эквивалент будет:

while(True) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...