Так называемый механизм ловушек — это технология, ставшая популярной благодаря программированию для Windows. Основная идея заключается в том, чтобы заранее закопать (предустановить) хук, куда может быть добавлена функция. Этот хук не имеет практического значения. Когда нам нужно перемодифицировать или увеличить логику этого места, монтировать расширенный класс или метод. эта точка.
Когда автор изучает механизм ловушек, он обращается к механизму тегов и ловушек TP3.2.3 и использует разработанную им структуру MVC, стиль каталогов которой имитирует TP3.2.3, что вызывает смех у больших парней.
В качестве простого примера мы собираемся написать функцию регистрации пользователя, как показано ниже:
/App/Home/Controller/IndexController.class.php
Внезапно в один прекрасный день заказчик сказал, что мне нужно добавить функцию, а новому пользователю будет начислено 50 баллов за регистрацию, поэтому я должен написать это:
Клиент очень доволен, но другой коллега ваш нужен ваш код, и вы говорите ему, что вы тянете из Git. Клиент делает еще один запрос для отправки электронного письма пользователю после пользовательских регистров (удерживайте (╬▔ блюдо▔)), то вы сделаете это:
Если у вас много подобных модификаций в проекте, что делать? Затем модифицируется? Проект будет только больше раздуваться, и тем вреднее. Дорогие клиенты? Не создавай проблем, ㄟ (▔, ▔) ㄏ. Подать в отставку? Думаю об ипотеке, хочу думать о жене и детях, я терпения (. ·`Ω`·). PS: Где жена и дети у программистов... (∀ ∀ ∀)
Ближе к дому лучшим решением будет использование крюкового механизма.
Сначала взгляните на класс Hook, который мы написали:
/CutePHP/Lib/Cute/Hook.class.php
Это простой класс Hook, который я написал, имитирующий Hook TP, который содержит статическое частное свойство Hooks для записи всех зарегистрированных ловушек.
Метод add передает имя и метод хука, и хук может быть сохранен в массиве. Listen используется для мониторинга хука. Пока есть хук, для выполнения хука будет вызываться метод exec. .
Давайте проверим это, сначала закопаем хук в /App/Home/Controller.class.php:
Затем создайте одну и ту же папку, что и крючок / каталог App / App / Home / Plugin / App / Home / Plugin / Регистрация и создайте файл register.php с тем же именем, что и крюк, и напишите простой класс, называемый регистр. Ниже Есть два метода, которые называются раньше, и он называется после:
Затем зарегистрируйте два крючка в публичной конфигурации проекта:
/App/Conf/Hook.php
Затем, когда мы получим доступ к методу Register контроллера Index в разделе Home, он будет отображаться:
Так как же работает конкретный принцип? Прежде всего, давайте кратко рассмотрим мой фреймворк: в базовом классе Cute есть метод Start, который используется для загрузки фреймворка запуска роутинга, и загрузки файла /App/Conf/Hook.php перед загрузкой контроллера. , Заходи:
Итак, в этом файле наш код выглядит так:
Подумайте о методе добавления нашего хука, который должен создать экземпляр хука (класса) регистра и сохранить его в частном массиве хуков.Этот шаг предшествует методу прослушивания.Затем мы используем метод прослушивания для мониторинга подключаемого модуля. и найдите, что он существует.Выполните метод этого объекта, чтобы реализовать функцию хука.
PS: Многие коды и функции в тексте не существуют и используются только для описания логического процесса.
PPS: В статье используется простой MVC-фреймворк, написанный мной, имитирующий TP3.2.3, я только им пользуюсь, он слишком прост и смешит всех больших парней.
PPPS: Просить о сборе, просить о пересылке. Нелегко быть оригинальным, поэтому, пожалуйста, укажите обработку.