Я написал скрипт, используя мою локальную установку 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
не имеет никакого отношения к моему вопросу, и трактовка любой программной конструкции как «плохого стиля» как таковая - это просто догма, которой нет места в моей идеологии программирования.