1.今天寫了一個redis單例模式類,使用自定義方法調(diào)用時,奇怪的是調(diào)用兩次只有一次生效,各位大佬幫忙瞅瞅唄..代碼如下:調(diào)用代碼:
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);
}
//防止類重復(fù)實例化
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)
{
//設(shè)置hook類存放目錄
$hookPath = APP_PATH . DIRECTORY_SEPARATOR . get_config('plugin_dir') . DIRECTORY_SEPARATOR;
//設(shè)置后綴
$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;
}
}
}
3 回答

ABOUTYOU
TA貢獻(xiàn)1812條經(jīng)驗 獲得超5個贊
你這也叫單例
runHook hook 也是個靜態(tài)方法
$obj = \eoc\library\Hook::getInstance();
$obj::runHook($class, $function, $hookType, $params);
你來告訴我,這各下面有什么區(qū)別
\eoc\library\Hook::runHook($class, $function, $hookType, $params);
- 3 回答
- 0 關(guān)注
- 379 瀏覽
添加回答
舉報
0/150
提交
取消