W3docs

endforeach

Ключевое слово "endforeach" в PHP завершает цикл "foreach" в альтернативном синтаксисе. Изучите синтаксис, примеры и частые ошибки.

Ключевое слово PHP endforeach

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

На этой странице рассмотрены синтаксис, случаи применения, рабочие примеры и типичные ошибки (смешение синтаксисов, работа со ссылками), на которых часто спотыкаются разработчики.

Синтаксис

Открывающую { заменяют на :, а закрывающую } — на endforeach;:

foreach ($array as $value):
  // code to be executed
endforeach;

Работает и в форме «ключ/значение»:

foreach ($array as $key => $value):
  // code to be executed
endforeach;

Оба варианта функционально идентичны стандартному синтаксису с фигурными скобками:

foreach ($array as $value) {
  // code to be executed
}

Когда применять

Альтернативный синтаксис предназначен прежде всего для шаблонов — файлов, в которых PHP и HTML перемешаны. Закрывающую } бывает сложно сопоставить с открывающей скобкой, когда между ними находится HTML-разметка, тогда как endforeach; говорит само за себя:

<ul>
<?php foreach ($products as $product): ?>
  <li><?= htmlspecialchars($product) ?></li>
<?php endforeach; ?>
</ul>

В чистом PHP-коде (без встроенного HTML) большинство команд предпочитает синтаксис с фигурными скобками. Выберите один стиль для файла и придерживайтесь его.

Примеры

Примеры использования PHP endforeach

<?php

// Example 1
$array = ["apple", "banana", "cherry"];
foreach ($array as $value):
  echo $value . PHP_EOL;
endforeach;

// Output:
// apple
// banana
// cherry

// Example 2
$array = ["a" => "apple", "b" => "banana", "c" => "cherry"];
foreach ($array as $key => $value):
  echo $key . " = " . $value . PHP_EOL;
endforeach;

// Output:
// a = apple
// b = banana
// c = cherry

В примере 1 перебирается простой список и выводится каждое значение; в примере 2 перебирается ассоциативный array, и захватываются как $key, так и $value.

Распространённые ошибки

Не смешивайте два синтаксиса. Если вы открыли блок с :, необходимо закрыть его через endforeach; — а если открыли с {, то закрывать нужно через }. Смешение синтаксисов вызывает ошибку разбора:

// Parse error: this is invalid
foreach ($array as $value): // opens with a colon
  echo $value;
} // ...but tries to close with a brace

Не забывайте точку с запятой. Правильно писать endforeach;, а не endforeach. Пропуск точки с запятой — распространённая опечатка, приводящая к синтаксической ошибке.

Ловушка со ссылками актуальна и здесь. Как и в любом foreach, если вы выполняете итерацию по ссылке (as &$value), переменная $value по-прежнему указывает на последний элемент после завершения цикла. Всегда вызывайте unset($value) после цикла, чтобы избежать неожиданных ошибок:

$array = [1, 2, 3];
foreach ($array as &$value):
  $value *= 2;
endforeach;
unset($value); // break the reference

print_r($array);
// Output:
// Array ( [0] => 2 [1] => 4 [2] => 6 )

Связанные ключевые слова альтернативного синтаксиса

endforeach входит в семейство завершающих конструкций альтернативного синтаксиса. Каждый цикл и условная конструкция имеют собственное ключевое слово:

  • endif — закрывает блок if:
  • endfor — закрывает блок for:
  • endswitch — закрывает блок switch:

О самом цикле читайте в главе foreach.

Заключение

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

Практика

Практика
Каков синтаксис управляющей конструкции endforeach в PHP?
Каков синтаксис управляющей конструкции endforeach в PHP?
Was this page helpful?