В php вообще проблемы с этим, наследие тяжких времен ) Потому и создаются обертки над массивами, строками и прочим, т.к. улучшений в этом плане не предвидится. 5.3 уже не поддерживается, не надо его использовать ) А на >=5.4 можно найти всё что нужно. Добавлено спустя 2 минуты 19 секунд: А зачем вообще нужно ветвление? У нас есть массив входящих данных и массив правил к ним, нужно просто их сопоставить и вывалить ошибки, либо идти дальше.
это не сложнее чем поиск функции/класса, описанной вообще в другом файле. а ведь это повседневная рутинная операция, при разборе легаси кода. А нормальная IDE вообще по клику к метке перекинет, вы что все в Блокноте программируете? )
https://github.com/Respect/Validation/tree/master/docs Код (PHP): try { Validator::key('username', Validator::length(2, 32)) ->key('birthdate', Validator::date()) ->key('password', Validator::notEmpty()) ->key('email', Validator::email()) ->assert($input); } catch (NestedValidationExceptionInterface $e) { print_r($e->getMessages()); } В требованиях указано >=5.3.6
ну это я приписал просто дабы пометить место. Сообщения которые выше как раз должны идти в ошибку, которая юзеру покажется. Просто это уже у каждого свой способо, как ошибки отображать. Добавлено спустя 1 минуту 39 секунд: вообще-то да. Это единственная проблема изначально. Странно, что ты пришел к этому выводу после беседы. Добавлено спустя 37 секунд: нет, с ними прогнозируемая ситуация - раз. Два, их легко найти и даже IDE легко с ними работает.
это не беда, это его особенность. ибо для описания алгоритмов нужны не только циклы, есть и нелинейная логика, автоматы... тут гото по сути, единственный внятный инструмент.
ну я заменил и живу счастливо. В подавляющем большинстве случаев исключение не вызывается, так что код работает быстро.
изначально в PHP goto не было, об этом речь. зачем добавлять то, без чего нормально обходились? а затем, что… ну ты в курсе. продолжай острить и сравнивать пыху с фортраном ) Добавлено спустя 6 минут 27 секунд: "goto" в списке зарезервированных слов Java с пометкой "not used". метки перехода всего лишь заменяют N в break N. что лишний раз доказывает роль goto )))
А все читали доку по goto, да? Там вообще-то написано, зачем ввели goto, основной случай его использования. Другое дело, что есть и другие способы этого добиться, но у них тоже есть свои проблемы. Особо когда правится уже существующий код. По-этому, в 90% случаев даже по указанному случаю - это будет инструмент быстрого изменения кода. Инструмент "последнего шанса". А значит, что бы его правильно применить - нужна очень хорошая квалификация.
а где же вот это: "А все читали доку по goto, да? Там вообще-то написано, зачем ввели goto"? [ выделено мной ] я перечитал еще раз и не нашел зачем. тем более там нет про "90%" и про "инструмент последнего шанса". а в твоём сообщении выглядит именно так, якобы это в офф.документации написано. конечно, обычно goto используется вместо break, о чем и трендим в предыдущих 2 страницах. но ты посчитал нужным "натыкать всех носом". ай-ай-ай!
Ты пробуй читать и вчитываться в то, что люди пишут. А не по диагонали. И не будет "выглядеть". Ну давай, детка, покажи мне пальчиком, где ты писал, что goto для того, что бы избежать break 10. Добавлено спустя 2 минуты 29 секунд: Выепнутся хотят. Хотя по факту тут самый вменяемый оказался топикстартер, несущий на 99% ахинею. А вот 1% про goto внезапно попал: "Помоему хуже goto только break N. Это реальный усложнённый код goto." Ибо break 3 - это реально ад, и по читаемости, и по устойчивости к рефакторингу.
Детка, ты мой ровестник, только у меня нет такого распухшего ЧСВ. Обычно я предваряю своё мнение оборотом "IMHO," или "Мне кажется, что", а не утверждаю что так сказал Заратустра. А вот моя цитата, которую ты попросил: Слово "break" 14 раз упоминается на первой странице темы и 11 раз на второй
С перлом не путаете? Добавлено спустя 1 минуту 13 секунд: Эта цитата несет прямо противоположный смысл.
Противоположный чему? Мне кажется, что фраза "common use is to use a goto in place of break" лучше всего переводится как "обычно goto используется вместо break", не? Ну дай свою версию. Противоположную, LOL )))
Не путаю. А почему Perl? Добавлено спустя 5 минут 30 секунд: Ну раз забыл "multi-level", то всё наоборот
Там есть конструкция last LABEL; И этим лейблом можно отмаркировать нужный блок. В PHP тупо число вложенных блоков, как тут константа то поможет? Тем более, вроде выражения в break запретили уже. Добавлено спустя 2 минуты 9 секунд: "обычным применением оператора goto является использование его вместо многоуровневых break" "Обычно goto стоит там, где больше уместен break или return" Совсем одинаковый смысл, угу.
Не, всё проще. Я о том, что в выражении "break N" N - это константа. Константы можно определить в начале кода как define('BREAK_ON_BAD_FORMAT', 1); или const BREAK_ON_BAD_FORMAT = 1; в классе Соответственно "break 1" будет выглядеть как "break BREAK_ON_BAD_FORMAT", что вполне удобочитаемо, хорошо определяется в IDE и подсвечивается.
Проблема плохой читаемости не в этом. В конце концов можно написать break 1; // BREAK_ON_BAD_FORMAT Ибо ваша версия не работает Код (Text): $ php -r ' define("NNN", 2); while(true) { while(true) { break NNN; }}; ' PHP Fatal error: 'break' operator with non-constant operand is no longer supported in Command line code on line 1 Проблема - понять, куда именно мы выходим. Это очень плохо читается, если циклы достаточно объемны по коду. Вторая проблема - при рефакторинге, не дай бог, потребуется еще один цикл добавить, нужно не забыть увеличить это число. И IDE не поможет, ибо на самом деле IDE не может знать - нужно нам выходить из нового цикла тоже, или оставаться в нем.
Ок-ок. Потому я за функции и коды возврата с помощью return. А goto как крайняя мера, как заплатка для выхода именно из глубокой.. Добавлено спустя 3 минуты 26 секунд: Donald, тебя уже три раза минимум попросили предоставить более сложный код, с которым ты столкнулся.
Ну в общем да, что-то такое я и сказал. В первую очередь инструмент работы с существующим кодом, когда провести рефакторинг нет возможности. Ну и прочие исключения. Есть и красивее способы, например Код (Text): $flag = true; for($i=0; $i<100 && $flag; $i++) { for($n=0; $n<100 && $flag; $i++) { for($x=0; $x<100 && $flag; $x++) { echo $x; $flag = false; } } } но тоже не всегда подходят.