1.今天写了一个redis单例模式类,使用自定义方法调用时,奇怪的是调用两次只有一次生效,各位大佬帮忙瞅瞅呗..
代码如下:
调用代码:
hook('redis_plugin', 'joinQueue', ['key' => 'leo', 'value' => ['测试hook']], 1);
hook('redis_plugin', 'popQueue', ['key' => 'leo'], 1);
hook方法代码:
function hook($class, $function , $params = null, $hookType = 0)
{
$obj = \eoc\library\Hook::getInstance();
$obj->runHook($class, $function, $hookType, $params);
}
hook类代码:
<?php
namespace eoc\library;
class Hook
{
private static $instance;
/**
* @var string hook文件存放目录
*/
protected static $hook;
//防止类被克隆
private function __clone()
{
trigger_error('Clone is not allow!',E_USER_ERROR);
}
//防止类重复实例化
public static function getInstance()
{
if (!(self::$instance instanceof self)) {
self::$instance = new self;
}
return self::$instance;
}
/**
* @param $class
* @param $function
* @param null $params 运行插件
* @param int 插件模式 0 工厂模式 1单例模式
*/
public function runHook($class, $function, $hookType = 0, $params = null)
{
//设置hook类存放目录
$hookPath = APP_PATH . DIRECTORY_SEPARATOR . get_config('plugin_dir') . DIRECTORY_SEPARATOR;
//设置后缀
$postfix = '.class.php';
$result = include($hookPath . $class . DIRECTORY_SEPARATOR . $class . $postfix);
if (!$result) {
setErrorInfo($class . '插件不存在');
}
switch ($hookType) {
case 0:
$object = new $class();
$object->$function($params);
break;
case 1:
//$object = $class::getInstance();
dump($params);
// $object::$function($params);
break;
default:
# code...
break;
}
}
}
PIPIONE
ABOUTYOU