Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Пятничная загадка для PHPшников

В ЖЖ увидел прекрасное — загадку про ПХП.

Те, кто знает этот язык, скажите, почему этот код не выдаёт ошибок или предупреждений (все ошибки, конечно, включены):

<?php
//bolknote.ru
?>
16 комментариев
Lynn «Кофеман» (alexeyten.ya.ru) 2013

Это метка и комментарий

malinnikov (malinnikov.livejournal.com) 2013

Принимает за лейбл для goto и комментарий за ним?

Дмитрий 2013

Потому что // и далее — это комментарии, а http:, да и любая другая конструкция, типа foobar: рассматривается интерпретатором как укороченный синтаксис операторов, типа for ...:

Вопрос теперь, почему не ругается на незнакомый оператор.

Дмитрий 2013

Ага, вверху поправили уже. Goto, якорь им в жопу, в 2013-ом году—то.

Shurik 2013

А на 5.2 не воркает :)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Дмитрий:

Ага, вверху поправили уже. Goto, якорь им в жопу, в 2013-ом году—то.

Что не так с goto в 2013-м году? Вы, надеюсь, помните, почему вообще не рекомендовали когда-то использовать goto? Или это абстрактная нелюбовь?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для alexeyten.ya.ru:

Первый же комментарий в точку :) Надеюсь, это было сделано без использования редактора с подсветкой? :)

Дмитрий 2013

Комментарий для Евгения Степанищева:

Я—то как раз помню. Плюс для меня лично он является абсолютно избыточной конструкцией, за последние лет десять программирования не было ни одного случая, когда я бы подумал “самое время написать маленький оператор безусловного перехода”, за исключением разработки на ассемблере.

Вы часто пользуетесь? Обрадовались добавлению в синтаксис? Раньше не хватало?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Дмитрий:

Вы часто пользуетесь? Обрадовались добавлению в синтаксис? Раньше не хватало?

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

В этом смысле goto лучше. Но использовать пока не доводилось.

Baka 2013

В этом смысле goto лучше.

В этом смысле лучше была бы конструкция «break МЕТКА», которая в некоторых языках есть.
(Когда-нибудь и в РНР будет.)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Baka:

Чем же лучше, расскажите? Слово другое?

Дмитрий 2013

Комментарий для Евгения Степанищева:

Тем, видимо, что работать будет только в циклах.

Я сторонник теории, что язык программирование должен поощрять (и формировать) у разработчика ряд полезных привычек и определенный образ мышления. Появление goto в php, с учетом его входного порога и ментальной зрелости аудитории может повлечь удвоение средней величины спагеттисности кода. Добавлять вещи из соображений “а шоб було” мне кажется глупым, у PHP хватает пренатальных проблем, с которыми стоило бы разобраться в первую очередь.

Пока те примеры использования, которые предполагаются выглядели так: вот правильное решение на PHP, а тут оно чуть понятнее, потому что есть goto. Хотя изначальное решение ни в какие ворота не лезет. Также авторы любят ссылаться на FSM, в которых GOTO, хотя сомневаюсь, что хотя бы один из них хотя бы раз FSM использовал. А, еще смешные отсылки на ядро линукса, где много goto. В итоге имеем печальную картину: косметические улучшения изначально кривого кода, FSM и ядро линукса. FSM, ядро линукса и PHP.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Дмитрий:

Т. е. из циклов выходить по goto хорошо, а из других блоков — нет? Почему, позвольте поинтересоваться?

Дмитрий 2013

Комментарий для Евгения Степанищева:

Я не говорил, что это хорошо, я предположил, что автор это имел в виду. Опять же лучше ≠ хорошо. Иметь сифилис лучше чем спид, как—то так.

Lynn «Кофеман» (alexeyten.ya.ru) 2013

Комментарий для Евгения Степанищева:

Нет. В JS такая же ситуация.
Я когда-то разбирался, почему в HTML срабатывает такой код
http://pastebin.com/bWPJhqR6
и с тех пор помню про метки.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для alexeyten.ya.ru:

Вы мне глаза открыли сейчас, кстати! Я-то думал, что браузеры его специально обрабатывают, потому что есть криворукие программисты!