Различия между циклом while и циклом for в PHP? - PullRequest
8 голосов
/ 23 апреля 2010

Я сейчас читаю книгу на PHP, и автор отметил, что разница между циклом while и циклом for состоит в том, что цикл for будет подсчитывать, сколько раз он выполняется.

Так что возьмитеэто:

<?php
    for ($i = 1; $i < 10; $i = $i + 1) {
        print "Number $i\n";
    }
?> 

Но не будет ли это таким же, как

<?php
    $i = 1;
        while ($i < 10) {
            $i = $i + 1;
            print "Number $i\n";
        }
?>

Или есть другие отличия, на которые он не указал?(Помимо использования цикла while для случаев, когда вы не уверены, как долго условие останется истинным, например, для выбора строк из базы данных)

Я имею в виду, если это единственное отличие, не могу ли я просто неиспользовать цикл for и использовать цикл while?

Ответы [ 5 ]

11 голосов
/ 23 апреля 2010

«За» выражает ваши намерения более четко

Функционально, ваши два примера совпадают. Но они выражают разные намерения.

  • while означает «Я не знаю, как долго продлится это состояние, но пока оно существует, делайте это».
  • for означает «У меня есть определенное количество повторений для вас».

Вы можете использовать один, когда имеете в виду другой, но код сложнее читать.

Некоторые другие причины, по которым for здесь предпочтительнее

  • Это более кратко и помещает всю информацию о цикле в одном месте
  • делает $i локальной переменной для цикла

Не забудьте foreach

Лично я чаще всего использую в PHP цикл foreach. Если вы обнаружите, что делаете такие вещи:

for ($i=0; $i < count($some_array); $i++){
  echo $some_array[$i];
}

... тогда попробуйте это:

foreach ($some_array as $item){
   echo $item;
}

Быстрее печатать, легче читать.

10 голосов
/ 23 апреля 2010

Можешь?Да, конечно.Но стоит ли вам это делать - это совсем другой вопрос.

Цикл for более читабелен в этом сценарии и определенно является соглашением, которое вы найдете практически во всех языках, имеющих директивы цикла.Если вы используете цикл while, люди будут удивляться, почему вы не использовали цикл for.

4 голосов
/ 23 апреля 2010

Функционально цикл for эквивалентен циклу while; то есть, каждый может быть переписан как другой без изменения результата или побочных эффектов. Тем не менее, каждый из них имеет разные коннотации. Цикл while выполняется, пока выполняется условие; условие статично, хотя обстоятельства меняются. Цикл for проходит по последовательности. Разница важна для программистов, но не для программ, так же как выбор имен переменных важен для программистов, даже если они могут быть изменены для создания функционально эквивалентного кода. Одна конструкция цикла будет иметь больше смысла, чем другая, в зависимости от ситуации.

3 голосов
/ 23 апреля 2010

A-петля

for (INIT; CONDITIONS; UPDATE) {
    BODY
}

- это то же самое, что и цикл while, структурированный так:

INIT
while (CONDITIONS) {
    BODY
    UPDATE
}

Хотя технически вы можете использовать одно или другое, существуют ситуации, когда while работает лучше, чем for и наоборот.

0 голосов
/ 23 апреля 2010

Это вопрос вкуса, личных предпочтений и читабельности. Иногда цикл while работает лучше логически. Иногда for.

Для моего личного правила, если мне не нужен инициализатор переменной, я использую while.

Но цикл foreach полезен по-своему.

Кроме того, в случае PHP, где все переменные, не входящие в функции, являются глобальными, переменная будет продолжать жить после цикла независимо от того, какой элемент управления цикла вы используете.

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