php hook 之简单例子
<?php
// 应用单例模式
// 建立相应的 plugins 文件夹,并建立 .php 文件放在里面
class plugin
{
public $actions;
public $filters;
private $plugin_dir;
private static $instance;
public static function getInstance()
{
if(self::$instance == null)
{
self::$instance = new self;
}
return self::$instance;
}
private function __construct()
{
$this->actions = $this->filters = array();
$this->plugin_dir = dirname(__FILE__).'/plugins/';
}
public function init()
{
$dir_handle = opendir($this->plugin_dir);
while($m = readdir($dir_handle))
{
if($m == '.' || $m == '..')
{
continue;
}else
{
$n = $this->plugin_dir . $m;
if(is_file($n))
{
$f = $n;
}else
{
$f = $n . '/' . $m . '.php';
}
include($f);
}
}
closedir($dir_handle);
}
public function do_action($action, $params = array())
{
$a = $this->actions[$action];
$c = $a;
if(is_callable($c))
{
call_user_func_array($c, $params);
}
}
public function add_action($action, $callable)
{
$this->actions[$action] = $callable;
}
public function add_filter($filter, $callable)
{
$this->filters[$filter] = $callable;
}
public function apply_filter($filter, $params = array())
{
$c = $this->filters[$filter];
if(is_callable($c))
{
call_user_func_array($c, $params);
}
}
}
global $pl;
$pl = plugin::getInstance();
$pl->init();
$pl->add_action("tfunc", 'hook'); //引用 pugins目录中的 hook函数而已
$pl->do_action('tfunc', array('aa', 'bb', 'cc'));
//结果为 array(0=>'aa', 1=>'bb', 2 => 'cc') 3表示3个参数
//其中 plugins 中的 函数为
/*
function hook($param = array())
{
$num = func_num_args();
$str = func_get_args();
print_r($str);
print_r($num);
}
*/
php hook 之简单例子的更多相关文章
- Hibernate4.2.4入门(一)——环境搭建和简单例子
一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- spring mvc(注解)上传文件的简单例子
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...
- ko 简单例子
Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模板 ...
- mysql定时任务简单例子
mysql定时任务简单例子 ? 1 2 3 4 5 6 7 8 9 如果要每30秒执行以下语句: [sql] update userinfo set endtime = now() WHE ...
- java socket编程开发简单例子 与 nio非阻塞通道
基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...
- 一个简单例子:贫血模型or领域模型
转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...
- SSDT Hook实现简单的进程隐藏和保护【转载】
原文链接:http://www.blogfshare.com/ssdthook-hide-protect.html 原文作者:AloneMonkey SSDT Hook实现简单的进程隐藏和保护 Alo ...
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
随机推荐
- IOS获取物理尺寸中7Plus中获取的是7的物理尺寸
IOS获取物理尺寸中7Plus中获取的是7的物理尺寸: 在开发调试过程中我的7Plus手机获取[uiscreen mainscreen].bounds为750 .1334. 解决方案:在手机中的显示 ...
- IOS ScrollowView 滑动到边缘后不允许再拖动
当scrollowview滑动图片时,滑动到最后一张图本应该不让其滑动,但是如果不可以去设置属性,依然可以滑动,露出白色的底色,挺影响美观的, 可以设置其属性: sv.bounces=NO; 这样就不 ...
- android颜色对应的xml配置值,颜色表
网上找的一些颜色值 XML配置 <?xml version="1.0" encoding="utf-8" ?> <resources> ...
- AndroidのUI设计研究(一)——自定义ProgressBar
最近迷上进度条,使用进度条可以增强用户体验,让用户心里有个底,再无奈的等待中体会loading的乐趣. 记得以前优乐美的官网,进入主页加载资源,显示给用户看的就是,炫彩背景下,一个杯子里的奶茶随着加载 ...
- WPF中DataGrid的ComboBox的简单绑定方式(绝对简单)
在写次文前先不得不说下网上的其他wpf的DataGrid绑定ComboBox的方式,看了之后真是让人欲仙欲死. 首先告诉你一大堆的模型,一大堆的控件模板,其实或许你紧紧只想知道怎么让combobox怎 ...
- [转] Android进阶——安卓接入微信,获取OpenID
PS: sendAuthRequest拿到code,通过code拿到access_token和openId,access_token可以拿到用户的信息 http://blog.csdn.net/hao ...
- 观察者模式Demo
using System; using System.Collections.Generic; namespace Demo { #region 抽象层,定义了观察者模式 /// &l ...
- 不同浏览器应用scrollTop属性
window.onscroll = _onScroll;function _onScroll(){ var aside = document.getElementsByClassName('aside ...
- Dynamic CRM:解决在创建业务流程时无法选择部分实体
在使用Dynamic CRM 业务流程的时候,会现在无法在步骤创建里选择我们想要的实体(如订单产品) 解决方法: 在SQL Server 中CRM数据库中找到[MetadataSchema].[Ent ...
- NET环境下的未处理异常(unhandled exception)的解决方案
NET环境下的未处理异常(unhandled exception )的解决方案 .Net 框架提供了非常强大的异常处理机制,同时对一些非托管代码很难控制的系统问题比如指针越界,内存泄漏等提供了很好的解 ...