While выводит только первую итерацию в цикле

71
08 февраля 2022, 13:00

Есть тестовый код в учебных целях, крутится на xampp:

<html>
    <?php
        $i = 1;
        print <<<PROGRAM
        <html>
            <head>
                <title>Program</title>
            </head>
            <body>
                print '<select name="people">;          
                while ($i < 10) {
                    print '<option>$i</option>';
                    $i++;
                }
                print '</select>';
            </body>
        </html>
        PROGRAM;
    ?>
</html>

В браузере выводится только первое значение 1. При просмотре исходного кода через браузер, он выглядит следующим образом:

<html>
    <script type="text/javascript" src="http://ff.kis.v2.scr.kaspersky-labs.com/FD126C42-EBFA-4E12-B309-BB3FDD723AC1/main.js?attr=Zt4V-HcipvBh_pPEXdKYCgw-eJkqbsFRLfJfbsuQlArJ5UuV0TJO00-62gpawCtC" charset="UTF-8"></script><html>
    <head>
        <title>Program</title>
    </head>
    <body>
        print '<select name="people">;          
        while (1 < 10) {
            print '<option>1</option>';
            1++;
        }
        print '</select>';
    </body>
</html></html>

Где ошибка и почему это происходит ?

Answer 1

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

Как правильно отмечают в комментариях, внутри HEREDOC код не выполняется, только подстановка переменных.

Вот, например так, можно переработать программу. Но вообще лучше взять учебник по PHP и поработать с ним.

$i = 1;
echo <<<PROGRAM
        <html>
            <head>
                <title>Program</title>
            </head>
            <body>
PROGRAM;
                print '<select name="people">\n';          
                while ($i < 10) {
                    print '<option>$i</option>\n';
                    $i++;
                }
                print '</select>\n';
echo <<<PROGRAM
</body>
</html>
PROGRAM;
Answer 2

Спасибо большое за ответ! Я и занимаюсь изучением по книжке, но в ней видимо ошибка в этом примере. С вашим примером практически все заработало, за исключением того что в выпадающем списке не цифры 1, 2, 3, ...9, а 9 раз повторяется $i. Получается цикл работает, но значение не заполняется. Поправил вот так, заработало:

while ($i < 10) {
print <<<PROGRAM
print '<option>$i</option>';
PROGRAM;
$i++;
}

Большое спасибо что помогли!

READ ALSO
Как правильно сделать sql запрос?

Как правильно сделать sql запрос?

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

100
Проблема в ссылке на видео

Проблема в ссылке на видео

Озадачен вопросом и не мог понять и найти ответВот как выглядит моя ссылка и все работает хорошо

65
ES6 и его поведение. JavaScript [дубликат]

ES6 и его поведение. JavaScript [дубликат]

Всем приветХотел бы узнать мнение опытных кодеров, почему такое поведение у метода filter

134