Intereting Posts
Как конвертировать время, как 2 часа или 3 часа ночи в HH: MM: формат SS в php? Список php в таблицу как отображать имя пользователя в URL-адресе PHP получает реальный IP (определение прокси) Настройка Oracle OCI8 для Windows 64 бит Ограничение памяти PHP 25 МБ исчерпано – загрузка файлов / обрезка / изменение размера Внутреннее соединение Mysql на 2 столах не работает MYSQL PHP Предупреждение: mysql_query () ожидает, что параметр 1 будет строкой CakeEmail в cakephp 2 может отправлять электронную почту одному и тому же smtp, но не swiftmailer в laravel Отправка json на php-сервер с помощью jquery ajax – json error PHP: Как проверить, не существует ли файл или разрешено ли разрешение? Получение вывода MS хранимой процедуры на php-вызов (sqlsrv) PHP-REGEX: акцентированные буквы соответствуют неактивным, и наоборот. Как достичь этого? lastInsertId не работает в Postgresql Laravel – передать несколько переменных для просмотра

Каковы допустимые примеры использования goto в PHP?

Я знаю, есть другие вопросы о инструкции goto представленной в PHP 5.3.

Но я не мог найти достойного ответа там, все были типа «последнее средство», «xkcd», «зло», «плохое», «ЗЛО !!!». Но никакого действительного примера. Только утверждения о том, что они не используются. Или утверждения о наличии редких случаев использования (опять же без примеров).

Итак, возникает вопрос: «Каковы допустимые варианты использования goto в PHP?». Ответы: «Есть ли зло?» не приветствуются и будут отменены. Благодаря 🙂

Или кто-то имеет ссылку на RFC, где объясняется это решение – я не мог найти его.

    Related of "Каковы допустимые примеры использования goto в PHP?"

    Одно возможное использование (которое может быть реализовано с использованием других средств) – это реализация конечного автомата .

    См. PHP Architect – GOTO в PHP 5.3: действительно ли это зло?

    В этой статье дается краткий обзор того, почему GOTO может быть полезным, почему мы имеем его в PHP (с 2004 года) и почему он был / противоречив. Как правило, общий ответ: GOTO в основном бесполезен и его следует избегать, если только в очень узких пространствах приложений (например, создание компилятора):

    Одно можно сказать наверняка: есть некоторые приложения, в которых хороший разработчик может эффективно использовать GOTO для создания более простого и эффективного кода, но, вероятно, это не обычные программы, которые ваш средний разработчик будет писать; поэтому здесь есть законное беспокойство, что неопытные программисты будут использовать GOTO для общего ущерба их коду.

    Также см. Некоторые из изначальных обсуждений / противоречий в списке новостей, упомянутых в статье:

    Также см. Этот подробный языковой агностический разговор о GOTO, который считается вредным для C2 Wiki

    Один случай, когда я использую его, – это когда у меня многоуровневая проверка, и я не хочу добавлять дополнительный код, когда я могу просто перейти к соответствующему разделу после моих проверок.

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

     if(hsensor[status] != OK) { alert = Humidity sensor hsensor[fail_id] failed with error hsensor[fail_error] goto sendAlert; } if(cosensor[status] != OK) { alert = Co2 sensor cosensor[fail_id] failed with error cosensor[fail_error] goto sendAlert; } 

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

    Оператор goto может использоваться для прерывания многоуровневых циклов.

    Этот конкретный пример приложения goto приведен на странице руководства goto :

    Вы также не можете переходить в какую-либо петлю или структуру коммутатора. Вы можете выпрыгнуть из них, и обычным явлением является использование goto вместо многоуровневого перерыва.

    Goto был в значительной степени заменен специальными заявлениями, такими как continue , break , try...catch . В те годы, когда я работаю с PHP, я не чувствовал, что это может помочь мне однажды. В таких языках, как C ++, которые не имеют инструкции break x ее можно использовать для выпрыгивания из вложенных циклов, но поскольку PHP имеет ее, нет никакой причины.

    Code Complete имеет очень приятную и подробную главу о gotos. Цитируя последние два параграфа:

    Использование gotos – это вопрос религии. Моя догма заключается в том, что в современных языках вы можете легко заменить девять из десяти gotos эквивалентными последовательными конструкциями. В этих простых случаях вы должны заменить gotos по привычке. В тяжелых случаях вы все равно можете изгнать goto в девяти из десяти случаев: вы можете разбить код на более мелкие подпрограммы, использовать try-finally, использовать вложенные ifs, тестировать и повторно тестировать переменную состояния или реструктурировать условное выражение. Исключение goto в этих случаях сложнее, но это хорошие умственные упражнения, и методы, обсуждаемые в этом разделе, дают вам инструменты для этого.

    В оставшемся случае из 100, в которых goto является законным решением проблемы, четко документируйте ее и используйте. Если у вас есть ботинки дождя, вам не стоит ходить вокруг блока, чтобы избежать грязевой лужи. Но держите свой разум открытым, чтобы использовать менее простые подходы, предложенные другими программистами. Они могут видеть то, что у вас нет.

    Мне очень сложно понять, почему команда PHP потрудилась добавить ее вообще (ведь в те годы мы жили без мира).