парсинг — реальное использование goto в переполнении стека

Я пишу какой-то анализатор кода для PHP и ищу реальные примеры использования инструкции «goto» в фреймворках / скриптах.

Пока я нашел только некоторые предельное использование в наборе тестирования Symfony.
Кажется, что эта языковая функция вообще не используется в пользовательском пространстве? Или это где-то существует?

-1

Решение

Новый ответ

Недавно я начал работать у нового работодателя, унаследовавшего унаследованный PHP частичный OO и частичный фреймворк MCV. На некоторых страницах представления выполняли большую часть бизнес-логики, фактически ничего не отображая; каждый раз, эти плоские файлы PHP были включены (а не include_once()) и так получилось, что многие части сайта были спагетти и скриптами типа фрикадельки (что-то, что GOTO должен производить так считается плохой практикой).

То, что происходило, было то, что некоторая логика срабатывает (потому что она была включена несколько раз и в нескольких местах), когда это не нужно, и создает журналы ошибок, потому что, возможно, одна строка или одна IF Блок операторов требовался во всем файле из сотен строк PHP.

Создание конечной точки и добавление в goto END; был хорошим промежуточным шагом к сокращению журналов ошибок и предотвращению запуска этих битов скрипта, когда они не нужны. Например:

if(empty($userRequest)){
goto END;
}
## The rest of the script from this point needs to fire until...

if(empty($_REQUEST['user_id'])){
goto END;
}
## etc...

Конечно, это только промежуточный шаг, чтобы фактически уменьшить количество спагетти. Я также перенес некоторую необходимую функциональность в классы контроллеров, где это было практично (и создал модели, в которых предполагаемые файлы представлений выполняли моделирование данных).

Я мог бы добавить в IF...ELSE блоки операторов для достижения тех же результатов, но количество логики в скрипте (и количество вложенных IF заявления и т.д …) означало, что добавление в goto END; фактически сделал сценарий более читабельным, в то время как происходили другие рефаторинг.

В конце концов, когда я распутаю все старые спагетти, я удалю GOTO заявления и сделать его полностью MVC и OO, как это должно быть.

Старый ответ

Вот пример использования goto:

<?php
ten:
print "Hello ";

goto ten;

Вы правы, это почти никогда не используется в программировании на PHP, потому что мудрость современного программирования говорит, что это приводит к «спагетти-коду», который труднее отлаживать.

Тем не менее, попробуйте не использовать безусловные циклы (что к чему goto на самом деле есть) на языках машинного уровня. Я помню, как несколько лет назад использовал безусловные циклы со сборкой MIP.

0

Другие решения

Других решений пока нет …