钩子注册步骤 原理 谁给解释一下 下面几个问题 再举例子说明一下 非常感谢 1、 钩子:如何产生的?2、 钩子产生的东西被安放在哪里?3、 安放之后 又是如何调用的?4、 调用之后又是如何显示的?这里是否已经是一个完全的从钩子产生到被使用的全部过程?麻烦您给几个例子 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是插件机制,任何一个成熟点的代码都会涉及到,实现各有不同,你可以找些代码来阅读下。原理其实很简单,比如你注册个新用户伪代码如下://表示引入user类型的插件,简单来说,user是个目录,目录下有特定规则的类文件名,include它们,实例化下。$plugin = & Factory::get('plugin','user');if(!$_POST['user_id']){//添加注册用户 //表示触发beforeUserRegister事件(预留钩子),也就是user目录下所有类文件里的beforeUserRegister方法,$_POST作为参数传进去. $re = $plugin->trigger('beforeUserRegister',array($_POST)); //处理注册信息 doRegister($_POST); //原理同上 $re = $plugin->trigger('afterUserRegister',array($_POST));}插件有个问题是执行顺序的设定,有些用数据库(后台可管理,比如joomla),有些直接用文件.意思是,比如/plugin/user/ 目录下有2个插件文件,也就是上面代码中会触发的两个插件.它们是plug_check.phpplug_auth.php它们内部的类名和文件名是挂钩的,这样才可以include文件的同时,实例化他们.当然你不用类文件的方式来实现插件也可以,只要你设计好一定的规范.plug_check.php:class PlugCheck extends Plugin{ function beforeUserRegister($post){} function afterUserRegister($post){}}plug_auth.php:class PlugAuth extends Plugin{ function beforeUserRegister($post){} function afterUserRegister($post){}}那么这时候问题就出来了,在处理注册之前,我是先触发plug_check.php文件的PlugCheck类的beforeUserRegister,还是先触发另外一个?这个就需要你去配置了. 2楼这么一说让我想起去年弄joomla的时候用到的一些插件,当时还没去深究.现在回忆下~~确实如此!插件所谓的钩子的常用的方式是数据库数据以及文件命名的规则(比如说文件名和文件内容中的类名相同). 至于1楼说的~~估计是理解成win平台的程序钩子问题!那个是c++用到的一块! $hooks = array('log','mail','queue'); foreach ($hooks as $hook){ if (function_exists( __FUNCTION__ . '_' . $hook)){ call_user_func_array (__FUNCTION__ . '_' . $hook, func_num_args()); } } PHP和JS的问题,求大神!全部分都给你 php-cli php-cgi 和apache 集成的区别是什么? 大家帮助我看下这个二维数组怎么通过foreach循环打印 PHP网页,如何禁止通过地址栏输入网址 我破了 google 搜索下拉框的 ajax 回调 url 使用iconv却无法写入数据库 网站必须设置http代理才可访问只看楼主 收藏 回复 如何获取指定数组元素的下标? 小问题 PHP的英文全称是什么? StatusNet关于的ie6的支持问题 php怎么设置硬断点
原理其实很简单,比如你注册个新用户
伪代码如下://表示引入user类型的插件,简单来说,user是个目录,目录下有特定规则的类文件名,include它们,实例化下。
$plugin = & Factory::get('plugin','user');
if(!$_POST['user_id'])
{//添加注册用户
//表示触发beforeUserRegister事件(预留钩子),也就是user目录下所有类文件里的beforeUserRegister方法,$_POST作为参数传进去.
$re = $plugin->trigger('beforeUserRegister',array($_POST));
//处理注册信息
doRegister($_POST);
//原理同上
$re = $plugin->trigger('afterUserRegister',array($_POST));
}插件有个问题是执行顺序的设定,有些用数据库(后台可管理,比如joomla),有些直接用文件.
意思是,比如/plugin/user/ 目录下有2个插件文件,也就是上面代码中会触发的两个插件.
它们是
plug_check.php
plug_auth.php
它们内部的类名和文件名是挂钩的,这样才可以include文件的同时,实例化他们.当然你不用类文件的方式来实现插件也可以,只要你设计好一定的规范.
plug_check.php:
class PlugCheck extends Plugin
{
function beforeUserRegister($post){}
function afterUserRegister($post){}
}plug_auth.php:
class PlugAuth extends Plugin
{
function beforeUserRegister($post){}
function afterUserRegister($post){}
}
那么这时候问题就出来了,在处理注册之前,我是先触发plug_check.php文件的PlugCheck类的beforeUserRegister,还是先触发另外一个?这个就需要你去配置了.
if (function_exists( __FUNCTION__ . '_' . $hook)){
call_user_func_array (__FUNCTION__ . '_' . $hook, func_num_args());
}
}