Является ли это эффективным циклическим PHP-кодированием?

#php #loops

#php #циклы

Вопрос:

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

 //Initialize page
    $startpage = isset($_POST['page']) ? $_POST['page'] : 1;
    $endpage = 11;

    //Loop through the start and end of the page
    while($startpage < $endpage) {

        if(isset($_POST['submit'])) {
            $startpage=$startpage 1;
        }

        if($startpage < $endpage) {
            break;
        }
    }

    //Alternative option
    // if(isset($_POST['submit'])) {

        // if($startpage < $endpage) {
            // $startpage = $startpage   1;
        // }    
    // }
  

Редактировать

Причина, по которой я выполняю проверку $ _POST, заключается в том, что я хочу, чтобы пользователь переходил с одной страницы на следующую только после отправки.

Ответ №1:

С тем, что вы закодировали, нет, это ужасно неэффективно;p. технически вы можете заменить свой код на

 if(isset($_POST['submit']) amp;amp; $startpage < $endpage){
    $startpage = $endpage;
}
  

поскольку ваша логика на самом деле ничего не делает, кроме увеличения $startpage до тех пор, пока оно не станет равным $endpage . В качестве лакомый кусочек, для увеличения на единицу вы можете сделать $startpage ;

Вашего комментария //Loop through the start and end of the page также … не должно быть там, потому что это не имеет никакого смысла, определенно лучше не иметь комментария, если ваш комментарий на самом деле не имеет смысла в том, что происходит IMO. Это отчасти объясняет, что вы пытаетесь сделать, но я все еще в замешательстве: P.

Как и все остальные, вы, похоже, не совсем понимаете, как работает цикл while, но если вы можете утверждать обратное, я беру свои слова обратно :).

Вот мое объяснение while цикла.

while Цикл повторяется так часто, как верно условие, которое вы ставите рядом с ним. Итак, если вы каждый раз произносите while($number is less than 11) , а затем увеличиваете $number на единицу, вам не нужно делать это break; из цикла, когда $number is less than 11 вручную, поскольку это то, что циклы выполняют автоматически.

Комментарии:

1. Спасибо за предложение кода, и я согласен, приведенный вами пример, безусловно, кажется более чистым. Возможно, я не совсем понял пример, над которым работаю. Я попробую еще раз. Вы начинаете с первой страницы и можете перейти на страницу 2 только после отправки формы, отсюда и $_POST[‘отправить’]. Теперь предположим, что вы находитесь на странице 1 и нажимаете отправить, выполняется код if(isset($_POST['submit'])) { $startpage=$startpage 1; , который увеличивается на 1 и переходит к выполнению следующего фрагмента кода, т. Е. if($startpage < $endpage) { break; }

2. Продолжение выше, теперь, видя, что цикл может увеличиваться только при наличии post, цикл while будет продолжать выполняться вечно. Разрыв находится на странице, потому что я хочу перейти к следующей странице, т. е. 2, и не продолжать цикл до 11, поскольку следующее приращение должно управляться пользователем, т. Е. $ _POST . Если вы закомментируете код if($startpage < $endpage) { break; }, вы увидите, что он будет зацикливаться вечно после отправки формы. Надеюсь, я выразился яснее.

3. Ах, ха, это означает, что вы используете while цикл, когда на самом деле вы должны быть просто if инструкцией. if(isset(post) amp;amp; $startpage < $endpage) $startpage ; на самом деле это все, что вам нужно. Похоже, у вас действительно нет ничего, что нужно зацикливать, поэтому вы создали что-то, что запускает цикл, а затем завершается, как только он выполняется. Вы создали оператор if из структуры цикла ;).

4. @PeanutsMonkey Я думаю, вы используете a while, потому что вы «предвидите», что это должно продолжать увеличиваться, когда на самом деле их количество нужно увеличивать только один раз за посещение страницы.

5. Я бы согласился с тем, что я придумал оператор if вне цикла. Вы заметите более простую версию моего кода ниже, которая была закомментирована, хотя и не такая элегантная, как вы предлагаете, т.е. if(isset (post) amp;amp; $startpage < $endpage) $startpage ;. Будем иметь это в виду. Помимо практики, мне еще предстоит научиться, когда использовать соответствующие утверждения. Я пытаюсь принять мантру keep it simple, однако часто вижу, что несколько операторов if неэффективны. Спасибо за ваши предложения и рекомендации.

Ответ №2:

Я не совсем уверен, что вы пытаетесь сделать, но, похоже, for цикл был бы более читабельным.

 $startpage = isset($_POST['page']) ? $_POST['page'] : 1;
$endpage = 11;
for($i=$startpage; $i<$endpage; $i  )
  {
  // do something
  }
  

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

Комментарии к вашему коду конкретно:

  1. Вы можете переписать $startpage=$startpage 1; как $startpage ;
  2. isset($_POST['submit']) это даст вам один и тот же ответ при каждом запуске цикла, поэтому установите результат в качестве переменной перед запуском цикла.

Комментарии:

1. Спасибо. Единственная причина, по которой я выписываю весь код, т.е. $ startpage = $ startpage 1, заключается в моем собственном понимании, прежде чем я начну писать код сокращенно. Я не осознавал, что while более полезен при циклическом просмотре массива. Есть ли какая-либо информация, рекомендующая, какие циклы использовать?

2. Какие циклы работают лучше всего, зависит от личных предпочтений и опыта. Тем не менее, я бы настоятельно рекомендовал прочитать что-то вроде Code Complete для получения подобных советов.

Ответ №3:

Я не уверен, что вы пытаетесь здесь сделать. Этот цикл будет выполняться только один раз из-за if инструкции. Если вы пытаетесь напечатать номера страниц от $startpage до $endpage , вы можете просто сделать это:

 $startpage = isset($_POST['page']) ? $_POST['page'] : 1;
$endpage = 11;

while($startpage < $endpage) {
    $startpage=$startpage   1;
}
  

На самом деле, почему вы проверяете $_POST['submit'] здесь?

Комментарии:

1. Извините, я должен обновить свой первоначальный пост, поскольку я должен был упомянуть, что я пытаюсь переходить с одной страницы на следующую за раз, что происходит только после того, как пользователь отправляет форму. Я не согласен с тем, что это выполняется только один раз, если только я не правильно понял цикл, видя, что количество $ startpage = $ startpage 1; происходит только тогда, когда произошла публикация, и поскольку значение post встречается один раз и всегда будет меньше 11, оно будет зацикливаться вечно. Опять же, я новичок в PHP и, возможно, что-то пропустил. Рад узнать что-то новое.