钩子注册步骤 原理 谁给解释一下 下面几个问题 再举例子说明一下 非常感谢 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()); } } 单选钮 前台显示问题。。。。。 如何取字符串末尾的数字 phpzie 不完全使用教程 有没有弄人人网游戏开发的啊?有几个新手问题! 本版第一问,牛人请进,关于网站架构 用wamp打开php工程项目无法连接数据库 [求救]简单问题:如何把内存按某一读取? 怎样设置mysql的密码? 如何结合HTML用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());
}
}