@Shimpanze

Как создать собственный, простой аналог языковой конструкции (вроде endwhile;)?

Добрый день!

Скажите, пожалуйста, можно ли в PHP, создать простой аналог языковой конструкции? Что то вроде endwhile;?

Допустим, в коде пишу так:

end_my_function;

...и после обработки на выходе получаю:

endwhile;
wp_reset_query();
}


P.S. Интересует, можно ли создать такую конструкцию, чтобы вызывать БЕЗ круглых скобок?
  • Вопрос задан
  • 203 просмотра
Решения вопроса 2
SerafimArts
@SerafimArts
Senior Notepad Reader
Конечно можно и для этого есть несколько вариантов решения:
1) Написать расширение, которое будет внедряться и собираться в требуемый опкод. Подробнее можно почитать на сайте пыха про Zend и его инструкции. Увы, данной информацией я не владею, так что и помочь не могу.

2) Через хук на автолоадер (например композера) перехватывать подключаемые файлы, рестримить их на свой протокол, затем написать LL(k) парсер с (E)BNF или воспользоваться готовыми (например AST парсер от Никиты), стоить дерево, находить нужные вставки внутри и заменять на свои, кешируя результирующие файлы (можно обойтись и без AST, простой заменой потока токенов, но такое решение будет менее надёжным).

Но я подозреваю, что оно не нужно, верно? По-этому есть третий вариант:
3) Т.к. я подозреваю, что данный вопрос имеет смысл для вьюх, то надо просто добавить своё правило/расширение в шаблонизатор, которым вы пользуетесь: Твига, Блейда или чего-нибудь ещё (т.к. вы не указали что именно используете).

Больше вариантов, насколько я помню - нет.
Ответ написан
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Позвольте уточнить, чего вы пытаетесь добиться?

Рискну предположить, что вас задалбывает часто писать одно и то же (в данном случае - кастомный Loop в WordPress). Это можно решить 2мя методами:

- написать свой loop builder, которому только параметры передать, а он остальное соберет сам.
- настроить live templates (это в PhpStorm, в других IDE есть аналоги) и использовать их. Например у меня в PhpStorm много таких live templates, я к примеру пишу ??loop, нажимаю tab и получаю сразу весь код цикла.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы