Я написал сценарий, используя мою локальную установку PHP 5.3 с использованием оператора goto
. Загрузив его на свой веб-сервер, я обнаружил, что у моего хостера все еще установлен PHP 5.2, и поэтому он не поддерживает goto
. Поэтому у меня вопрос, как имитировать функциональность goto
в следующем контексте:
foo();
iterator_start:
foreach ($array as $array_item) {
switch ($array_item) {
case A:
foo();
break;
case B:
// Substitute
array_splice($array, offset($array_item), 1, array(A, A, B, C));
// Restart iterator
goto iterator_start;
break;
}
}
Идея состоит в том, что массив должен быть изменен в соответствии с набором правил подстановки. После выполнения правила (которое может изменять любое количество элементов массива в любой позиции, заменять их или даже удалять) все должно начинаться с нуля, потому что весь массив мог измениться непредсказуемым образом (таким образом, правила рекурсивной замены разрешены как Что ж). Решение, которое я использую, когда goto
просто переходит к началу цикла после каждой замены, мне кажется очень простым и даже довольно чистым, но, как я уже упоминал, я не могу использовать его на своем веб-сервере.
Есть ли здесь замена для goto
, или можно выполнить ту же задачу совершенно другим способом (желательно без изменения слишком большого количества кода)?
Любые идеи приветствуются.
Вежливая просьба. Пожалуйста, избавьте меня от лекций о пользе и опасности goto
. Я прочитал PHP и goto выражение, которое будет добавлено в PHP 5.3, и знать о спагетти-коде и всех тех, которые в моде «считались вредными» с 1980-х годов. Обсуждение предполагаемого зла goto
не имеет ничего общего с моим вопросом, а рассматривать любую программную конструкцию как «плохой стиль» per se - это просто догма, которой нет места в моей идеологии программирования.