PHP: Альтернативный синтаксис управляющих структур

Change language: EnglishBrazilian PortugueseChinese (Simplified)FrenchGermanJapaneseRussianSpanishTurkishOther

Submit a Pull Request Report a Bug

(PHP 4, PHP 5, PHP 7, PHP 8)

PHP предлагает альтернативный синтаксис для некоторых его управляющих структур, а именно: if, while, for, foreach и switch. В каждом случае основной формой альтернативного синтаксиса является изменение открывающей фигурной скобки на двоеточие (:), а закрывающей скобки на endif;, endwhile;, endfor;, endforeach; или endswitch; соответственно.

В приведённом выше примере, блок HTML «A равно 5» вложен внутрь структуры if, написанной с альтернативным синтаксисом. Блок HTML будет показан только если переменная $a равна 5.

Альтернативный синтаксис также применяется и к

else и elseif. Ниже приведена структура if с elseif и else в альтернативном формате:

Замечание:

Смешивание синтаксиса в одном и том же блоке управления не поддерживается.

Внимание

Любой вывод (включая пробельные символы) между выражением switch и первым case приведут к синтаксической ошибке. Например, данный код не будет работать:

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

?> и следовательно ничего не выводится между switch и case:

Смотрите также while, for и if для дальнейших примеров.

add a note

User Contributed Notes 2 notes

up

down

10

toxyy

10 months ago

I feel compelled to give a more elegant way using heredoc than the other comment:

<ul>
<?php foreach($list as $item): echo
<<<ITEM
    <li>Item $item[name]</li>
ITEM;
endforeach; ?>
</ul>

Which works better with multi line blocks, as you only need one overall php tag.

(please don't omit the closing </li> tag despite it being legal, personal preference)

up

down

-39

johannes dot kingma at gmail dot com

1 year ago

The alternative control syntax can be combined elegantly with the short php notation <?- => for output where both blend in into the html code

    <ul>
    <?php for($counter=0; $counter<10; $counter++) :?>
        <li>Item <?=$counter?>
    <?php endfor;?>
    </ul>

(Btw. ommiting the </li> is perfectly legal)

add a note

Циклы в шаблонизаторе Blade в Laravel

Шаблонизатора Blade в Laravel позволяет использовать не только примитивную логику для организации HTML кода вывода. Он ещё и обладает функционалом для создания циклом. Делается это с помощью директивы @foreach

. Продемонстрируем его работу на примере:

@foreach ($ar as $el)
   <div>{{ $el }}</div>
@endforeach

Этот код выводит значения всех элементов массива «$ar». Как можно заметить логика синтаксиса очень похожа на конструкцию foreach в PHP. Используя тот же синтаксис, что и у PHP, можно привести пример вывода пары ключ-значение:

@foreach ($ar as $key => $el)
   <div>Ключ: {{ $key }}, значение: {{ $el }}</div>
@endforeach

Если массив использовался ассоциативный многомерный массив, то существует возможность обращения к элементу массива по ключу внутри этого цикла:

@foreach ($ar as $el)
   <div>Имя: {{ $el['name'] }}, возраст: {{ $el['age'] }}</div>
@endforeach

Цикл может комбинироваться в коде с другими директивами, к примеру с условиями:

@foreach ($ar as $key => $el)
   @if ($el > 0)
      <div>Ключ: {{ $key }}, значение: {{ $el }}</div>
   @endif
@endforeach

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

@foreach ($arFirst as $keyFirst => $arSecond)
   @foreach ($arSecond as $keySecond => $elSecond)
      @if ($elSecond > 0)
         <div>
            Ключ из первого цикла: {{ $keyFirst }}<br>
            Ключ из второго цикла: {{ $keySecond }}<br>
            Значение из второго цикла: {{ $elSecond }}<br>
         </div>
      @endif
   @endforeach
@endforeach

Цикл for

Аналогично PHP, Blade умеет работать с простейшим циклом «for», у которого задан шаг, минимальное и максимальное значение:

@for ($i = 0; $i < 10; $i++)
   текущее значение переменной: {{ $i }}
@endforeach

Цикл forelse

Такой код будет выводить пару ключ-значение только если значение больше нуля. А с помощью такого кода можно выводить значение только есть массив не является пустым:

@if ( count($ar) )
   @foreach ($ar as $el)
      <div>{{ $el }}</div>
   @endforeach
@else
      <div>Массив пустой!</div>
@endif

Благодаря шаблонизатору Blade можно переписать этот код более компактно с помощью «@forelse«, при этом не потеряв логики (код будет делать то же самое):

@forelse ($ar as $el)
      <div>{{ $el }}</div>
@empty
      <div>Массив пустой!</div>
@endforelse

«forelse» выполняет цикл только в том случае, если обходимый массив не является пустым. Если же он пустой, то выполняется директива «@empty«, которая ставится после него.

Операции внутри цикла

Как и язык программирования PHP, шаблонизатор Blade умеет распознавать различные операции внутри цикла.

К примеру, аналоги этих операций: «@break» (прерывает цикл) и «@continue» (приступает к следующей итерации цикла). Продемонстрируем их работу:

@foreach ($ar as $key => $el)
   @if ($el == 5)
      <div>Ключ: {{ $key }}, значение: {{ $el }}</div>
      <div>Прерываем цикл!</div>
      @break
   @endif

   @if ($el > 10)
      <div>Переходим к следующей итерации!</div>
      @continue
   @endif
@endforeach

Переменная $loop внутри цикла

Внутри циклов существует специальная переменная $loop. Она записывается не как директива, а именно переменная (со знаком доллара в начале). В значение этой переменной попадает текущий индекс цикла. С помощью неё можно узнать на какой итерации цикла сейчас находимся. Это делается так:

@foreach ($ar as $key => $el)
   @if ($loop->first)
      Это первая итерация
   @endif

   @if ($loop->last)
      Это последняя итерация
   @endif
@endforeach

Переменная $loop содержит несколько полезных свойств:

Свойство Описание
$loop->index Индекс текущей итерации цикла (начинается с 0).
$loop->iteration Текущая итерация цикла(начинается с 1).
$loop->remaining Число оставшихся итераций цикла.
$loop->count Общее число элементов итерируемого массива.
$loop->first
Первая ли это итерация цикла.
$loop->last Последняя ли это итерация цикла.
$loop->depth Уровень вложенности текущего цикла.
$loop->parent Переменная loop родительского цикла, для вложенного цикла.

Если цикл вложенный, то к переменной $loop родительского цикла можно обратиться через свойство parent:

@foreach ($arFirst as $keyFirst => $arSecond)
   @foreach ($arSecond as $keySecond => $elSecond)
      @if ($loop->parent->first)
         Это первая итерация родительского цикла
      @endif
      @if ($loop->first)
         Это первая итерация сложенного цикла
      @endif
   @endforeach
@endforeach

Была ли эта статья полезна? Есть вопрос?

Закажите недорогой хостинг Заказать

всего от 290 руб

php — endforeach в циклах?

спросил

Изменено 5 лет, 5 месяцев назад

Просмотрено 168 тысяч раз

Я использую скобки при использовании циклов foreach. Для чего нужен endforeach?

  • php
  • циклы
  • foreach
  • оператор if

0

Это в основном для того, чтобы вы могли сделать операторы start и end более четкими при создании HTML в циклах:

 
        
        <тд>
        

против

 <таблица>

    
        
<тд>

Надеюсь, мой пример достаточен, чтобы продемонстрировать, что если у вас есть несколько уровней вложенных циклов, и отступы сбрасываются всеми открывающими/закрывающими тегами PHP и содержащимся HTML (и, возможно, вам нужно сделать отступ HTML определенным образом, чтобы получить свою страницу так, как вы хотите), форма с альтернативным синтаксисом ( endforeach ) может упростить анализ вашего мозга. В обычном стиле закрывающие } можно оставить сами по себе, что затруднит определение того, что они на самом деле закрывают.

4

Это оператор конца для альтернативного синтаксиса:

 foreach ($foo as $bar):
    ...
конец для каждого;
 

Полезно, чтобы сделать код более читаемым, если вы выходите из PHP:

 
    <разд...>
        ...
    

2

в качестве альтернативного синтаксиса вы можете писать циклы foreach вот так

 foreach($arr as $item):
    //делаем что-то
конец для каждого;
 

Этот тип синтаксиса обычно используется, когда php используется как язык шаблонов как таковой

 
    

 

Это просто другой синтаксис. Вместо

 foreach ($a as $v) {
    # . ..
}
 

Вы можете написать так:

 foreach ($a as $v):
    # ...
конец для каждого;
 

Они будут работать точно так же; это просто вопрос стиля. (Лично я никогда не видел, чтобы кто-нибудь использовал вторую форму.)

8

Как насчет этого?

 <ул>

    <ул>
    
        
  • Мы по-прежнему можем использовать более широко используемые фигурные скобки и, в то же время, повысить читабельность.

    Использование foreach: endforeach; не только делает вещи читабельными, но и снижает нагрузку на память, как указано в документации по PHP. Так что для больших приложений, получающих много пользователей, это будет лучшим решением

    Как насчет этого?

     ";
            foreach($items as $item){
                эхо "
  • $item
  • "; } эхо ""; } ?>

    1

    Зарегистрируйтесь или войдите в систему

    Зарегистрируйтесь с помощью Google

    Зарегистрироваться через Facebook

    Зарегистрируйтесь, используя электронную почту и пароль

    Опубликовать как гость

    Электронная почта

    Обязательно, но не отображается

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    PHP: Альтернативный синтаксис для управляющих структур

    Изменение языка: английскийбразильский португальскийкитайский (упрощенный)французскийнемецкийяпонскийрусскийиспанскийтурецкийдругое

    Отправить запрос на вытягивание Сообщить об ошибке

    (PHP 4, PHP 5, PHP 7, PHP 8)

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

    В приведенном выше примере блок HTML «A равно 5» вложен в , если оператор написан альтернативным синтаксисом. Блок HTML будет отображаться, только если $a равно 5.

    Альтернативный синтаксис применяется к , иначе и , иначе . Ниже приводится , если структура с , иначе и иначе в альтернативном формате:

    Примечание :

    Смешивание синтаксисов в одном блоке управления не поддерживается.

    Предупреждение

    Любой вывод (включая пробелы) между переключателем оператор и первый случай приведет к синтаксису ошибка. Например, это неверно:

    Принимая во внимание, что это действительно так, поскольку завершающая новая строка после 9Оператор 0033 switch считается частью закрытия ?> и, следовательно, ничего не выводится между коммутатор и корпус :

    См. также пока, для и если для дальнейших примеров.

    добавить примечание

    Пользовательские заметки 2 заметки

    вверх

    вниз

    10

    toxyy

    10 месяцев назад

    Я чувствую себя обязанным дать более элегантный способ использования heredoc, чем другой комментарий:


      <<    
    • Item $item[name]

    • ITEM;
      конецфореач; ?>

    Что лучше работает с многострочными блоками, так как вам нужен только один общий тег php.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    запись была удалена
    запись была удалена