php 钩子作用,php钩子,个人不太成熟的理解

只要是扩展功能使用方便,一个项目中安装插件

在项目代码中,你认为要扩展(暂时不扩展)的地方放置一个钩子函数,等需要扩展的时候,把需要实现的类和函数挂载到这个钩子上,就可以实现扩展了。

例如用户注册成功

class Demo{

public function index(){

/*

发送短信的代码

*/

/*

发送邮箱的代码

*/

/*

其他功能可能需要的功能代码

*/

//页面跳转到网站首先等等

}

}

$demo = new Demo(); //new一个对象出来

$demo->index(); //调用执行就可以了

可以把中间的模块代码写到插件里面

├─plugin // 插件目录

│ ├─sendSms // 发送短信的插件

│ │ ├─config.php // 配置项

│ │ ├─index.php // 程序处理内容

│ ├─sendEmail // 发送邮件的插件

│ │ ├─config.php

│ │ ├─index.php

│ ├─plugin2 // 其他功能插件

│ │ ├─config.php

│ │ ├─index.php

│ ├─...

├─index.php // 业务逻辑

插件的config.php代码

return array (

'status' => 1, // 定义状态 1表示开启 0表示关闭

'title' => '发送短信', // 插件的名称

);

插件的index.php文件代码,业务逻辑代码

Hook::add('sendSms',function(){ // 不同的插件需要改名称

echo '发送短信的内容
';

});

注册成功的业务逻辑代码变为:

class Test{

public function index(){

// 用户注册成功

// 获取全部插件

$pluginList=scandir('./plugin/');

// 循环插件 // 排除. ..

foreach ($pluginList as $k => $v) {

if ($v=='.' || $v=='..') {

unset($pluginList[$k]);

}

}

echo "简易后台管理


";

// 插件管理

foreach ($pluginList as $k => $v) {

// 获取配置项

$config=include './plugin/'.$v.'/config.php';

$word=$config['status']==1 ? '点击关闭' : '点击开启';

echo $config['title'].''.$word.'
';

}

echo '


';

// 输出插件内容

foreach ($pluginList as $k => $v) {

// 获取配置项

$config=include './plugin/'.$v.'/config.php';

if ($config['status']==1) {

include './plugin/'.$v.'/index.php';

// 运行插件

Hook::run($v);

}

}

// 前往网站首页

}

}

// 插件类

class Hook{

// 注册添加插件

public static function add($name,$func){

$GLOBALS['hookList'][$name][]=$func;

}

// 执行插件

public static function run($name,$params=null){

foreach ($GLOBALS['hookList'][$name] as $k => $v) {

call_user_func($v,$params);

}

}

}

// 更改插件状态

if (isset($_GET['change'])) {

// 获取到配置项

$config=include './plugin/plugin'.substr($_GET['change'],-1).'/config.php';

// 如果是开启 那就关闭 如果是关闭 则开启

$config['status']=$config['status']==1 ? 0: 1;

// 将更改后的配置项写入到文件中

$str="<?php \r\n return ".var_export($config,true).';';

file_put_contents('./plugin/'.$_GET['change'].'/config.php', $str);

header('Location:./');

}

$test=new Test();

$test->index();

如果有其他需求需要加入注册成功,只用增加插件即可,

执行结果:

5e041a784b01

程序执行结果

很多开源系统都有用到,dz,wordpress等等

这个仅是本人初学php钩子,个人理解,还不知道对不对,欢迎各位大神指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值