Как стать автором
Обновить

Комментарии 12

Уберите goto, а то щас запинают. Пишите просто &$sub;
Данное применение goto оправдано, тут происходит jump, а не вызов процедуры.
А я и не говорил про то, оправдано или нет. Я говорил о том, что для большинства goto — это красная тряпка.

Заметьте, я писал именно о том, что Вас запинают.
Ничего страшного :)
Напишу для тех, кто будет это читать, хотя пост и старый.
Такое использование goto имеет один нюанс — текущий фрейм выполнения (это у нес сама функция AUTOLOAD) не попадает в стек вызовов, т.е. изнутри сконструированной функции в стеке вызова AUTOLOAD виден не будет. А при вызове &$sub — будет.
Таким образом с точки зрения созданной функции первый запуск ничем не отличается от последующих.
Мне доводилось сопровождать код, объёмом 100000 строк, написанный с использованием такого приёма. Это была самая страшная пытка. Генерить методы налету — величайшее зло, ибо их потом даже нельзя нагрепать в сорцах; а если у вас 15-и кратное наследование, то найти, где же, что появилось… ну просто невозможно! Никогда так не делайте!
Да, сопровождать большие проекты на перле, та ещё задача.
Никогда — это слишком долго.

Есть несколько слчаев, когда это полезно.

В основном различные ORM, врапперы.
Ладно, поправка :-)
Этот метод можно использовать в коде, только при условии, что документация будет так хороша, и сам код будет на столько универсален и безупречен, что читать и править его никогда и никому не придётся. Какие бы новые треблвания ни предъявила бы к софту жизнь.
Т.е. — это или чудо-код, или просто мёртворождённый проект.
Согласен с Вами. У нас такой код используется как раз в 6 местах суммарно, не более того, и это фактически ядро системы.
Непонятно, зачем $name получали?
Не помню уже, скорее всего в оригинальном коде была зависимость от $name (разные методы, типа find_....).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории