Пятничная загадка для PHPшников
В ЖЖ увидел прекрасное — загадку про ПХП.
Те, кто знает этот язык, скажите, почему этот код не выдаёт ошибок или предупреждений (все ошибки, конечно, включены):
<?php
//bolknote.ru
?>
Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.
Это метка и комментарий
Принимает за лейбл для goto и комментарий за ним?
Потому что // и далее — это комментарии, а http:, да и любая другая конструкция, типа foobar: рассматривается интерпретатором как укороченный синтаксис операторов, типа for ...:
Вопрос теперь, почему не ругается на незнакомый оператор.
Ага, вверху поправили уже. Goto, якорь им в жопу, в 2013-ом году—то.
А на 5.2 не воркает :)
Комментарий для Дмитрий:
Что не так с goto в 2013-м году? Вы, надеюсь, помните, почему вообще не рекомендовали когда-то использовать goto? Или это абстрактная нелюбовь?
Комментарий для alexeyten.ya.ru:
Первый же комментарий в точку :) Надеюсь, это было сделано без использования редактора с подсветкой? :)
Комментарий для Евгения Степанищева:
Я—то как раз помню. Плюс для меня лично он является абсолютно избыточной конструкцией, за последние лет десять программирования не было ни одного случая, когда я бы подумал “самое время написать маленький оператор безусловного перехода”, за исключением разработки на ассемблере.
Вы часто пользуетесь? Обрадовались добавлению в синтаксис? Раньше не хватало?
Комментарий для Дмитрий:
Поскольку я частенько пользуюсь break, иногда чем-то вроде break 2, то меня раздражало, конечно, что стоит избавиться от внешнего цикла, как все break, где параметр больше единицы, нужно переделать.
В этом смысле goto лучше. Но использовать пока не доводилось.
В этом смысле лучше была бы конструкция «break МЕТКА», которая в некоторых языках есть.
(Когда-нибудь и в РНР будет.)
Комментарий для Baka:
Чем же лучше, расскажите? Слово другое?
Комментарий для Евгения Степанищева:
Тем, видимо, что работать будет только в циклах.
Я сторонник теории, что язык программирование должен поощрять (и формировать) у разработчика ряд полезных привычек и определенный образ мышления. Появление goto в php, с учетом его входного порога и ментальной зрелости аудитории может повлечь удвоение средней величины спагеттисности кода. Добавлять вещи из соображений “а шоб було” мне кажется глупым, у PHP хватает пренатальных проблем, с которыми стоило бы разобраться в первую очередь.
Пока те примеры использования, которые предполагаются выглядели так: вот правильное решение на PHP, а тут оно чуть понятнее, потому что есть goto. Хотя изначальное решение ни в какие ворота не лезет. Также авторы любят ссылаться на FSM, в которых GOTO, хотя сомневаюсь, что хотя бы один из них хотя бы раз FSM использовал. А, еще смешные отсылки на ядро линукса, где много goto. В итоге имеем печальную картину: косметические улучшения изначально кривого кода, FSM и ядро линукса. FSM, ядро линукса и PHP.
Комментарий для Дмитрий:
Т. е. из циклов выходить по goto хорошо, а из других блоков — нет? Почему, позвольте поинтересоваться?
Комментарий для Евгения Степанищева:
Я не говорил, что это хорошо, я предположил, что автор это имел в виду. Опять же лучше ≠ хорошо. Иметь сифилис лучше чем спид, как—то так.
Комментарий для Евгения Степанищева:
Нет. В JS такая же ситуация.
Я когда-то разбирался, почему в HTML срабатывает такой код
http://pastebin.com/bWPJhqR6
и с тех пор помню про метки.
Комментарий для alexeyten.ya.ru:
Вы мне глаза открыли сейчас, кстати! Я-то думал, что браузеры его специально обрабатывают, потому что есть криворукие программисты!