所谓Hook机制,是从Windows编程中流行开的一种技术。其主要思想是提前在可能增加功能的地方埋好(预设)一个钩子,这个钩子并没有实际的意义,当我们需要重新修改或者增加这个地方的逻辑的时候,把扩展的类或者方法挂载到这个点即可。 笔者在学习钩子机制时,参考的是TP3.2.3的tag和Hook机制,使用的是自己开发的MVC框架,其目录风格等均模仿TP3.2.3,让大佬们见笑了。 举个简单的例子,我们现在要写一个用户注册的功能,如下图: /App/Home/Controller/IndexController.class.php 突然有一天,客户说我需要增加一个功能,新用户注册奖励50积分,那我只好这样写: 客户看了很满意,但是你的另一个同事需要你的代码,你跟他说自己从git上pull。客户又提出一个要求,要在用户注册后给用户发一个邮件(忍住(╬▔皿▔)),那你会这样做: 如果在一个项目中,有大量的类似修改,你该怎么办?就那么修改?项目只会越来越臃肿,越发的杂乱不堪。捅死客户?别闹了,犯法的ㄟ( ▔, ▔ )ㄏ。辞职?想想房贷,再想想妻儿老小,我忍(。・`ω´・)。ps:程序员哪来的妻儿…( ̄∀ ̄) 言归正传,最好解决办法就是使用钩子机制。 首先来看一下我们写的Hook类: /CutePHP/Lib/Cute/Hook.class.php 这是我仿照TP的Hook写的一个简单的Hook类,该类中包含了一个静态的私有属性Hooks用于记录所有已经注册的钩子 add方法传入钩子的名称和方法,即可将这个钩子存入数组中,listen则是用于监听某个钩子,只要有这个钩子将调用exec方法执行这个钩子 我们来测试一下,首先在/App/Home/Controller.class.php中埋入钩子: 然后在/App/Home/Plugin目录下面建立和钩子一样的文件夹 /App/Home/Plugin/register… Read More “PHP:如何实现Hook机制, php钩子函数, php钩子实现”