有关php钩子的问题

ocharles 发布于 2016/10/07 22:09
阅读 350
收藏 0

@聽雨人 你好,想跟你请教个问题:上次看到你发的一个评论有关于钩子的。http://www.oschina.net/question/1434721_219324  想请教你一下,具体是怎么实现的,现在感觉自己的代码用起钩子来并不是很得心应手。

加载中
1
eechen
eechen
PHP一般用call_user_func和call_user_func_array放钩子实现插件机制.
当调用的函数名(类的方法名)和参数未知(变量)时,需要使用call_user_func:
<?php
function foo($a) {
    echo $a;
}
//调用函数foo,参数为Hello
call_user_func('foo', 'Hello'); //输出Hello
call_user_func_array('foo', array('Hello')); //输出Hello

class a {
    public static function b($c) {
        echo $c;
    }
}
//调用类a中的方法b,参数为Hello
call_user_func(array('a', 'b'), 'Hello'); //输出Hello
call_user_func_array(array('a', 'b'), array('Hello')); //输出Hello

call_user_func_array函数和call_user_func很相似,
只不过是换了一种方式传递了参数,让参数的结构更清晰.
另外call_user_func_array参数支持引用传递:
<?php
error_reporting(E_ALL);
function increment(&$var) {
    $var++;
}
$a = 0;
call_user_func('increment', $a);
echo $a."\n"; //输出0,注意:传入call_user_func()的参数不能为引用传递
call_user_func_array('increment', array(&$a));
echo $a."\n"; //输出1
0
Tuesday
Tuesday

php的钩子就是改变调用过程..

比如 strlen() 就不能这样用了, 需要改成call_hook('strlen','abc')

返回顶部
顶部