php鉤子原理和實現

2022-08-28 14:51:23 字數 2809 閱讀 1163

5.3以下和5.3以上的版本在php類與物件區別很大,請注意

其實原理很簡單,有些人把事情弄的過於發雜,其實就是呼叫某個目錄下的比如/hook目錄下註冊在hook函式裡面和讀取hook配置檔案裡面的類的方法的乙個呼叫類的方法的功能

目的就是最少改動**,改動舊功能,或者增加一些新功能,或者簡單說成呼叫函式都行

但是讀取hook的配置檔案,還是需要在系統的裡面每次都需要讀取,其實就失去了hook的意義,建議只做鉤子本身的就好

參看一下ci的hook,僅擷取hook函式核心部分

<?php 

protected function _run_hook($data) () : $data();

return true;

} elseif (!is_array($data))

if ($this->_in_progress === true)

if (!isset($data['filepath'], $data['filename']))

if (!file_exists($filepath))

$class = empty($data['class']) ? false : $data['class'];

$function = empty($data['function']) ? false : $data['function'];

$params = isset($data['params']) ? $data['params'] : '';

if (empty($function))

// set the _in_progress flag

$this->_in_progress = true;

// call the requested class and/or function

if ($class !== false) else

} else

// store the object and execute the method

$this->_objects[$class] = new $class();

$this->_objects[$class]->$function($params);

核心部分 讀取引數部分,去例項化類呼叫方法 傳遞引數 其實這也是mvc url路由實現的核心,現在很多

//都是使用 call_user_func_array call_user_func 這兩個方法

} } else

$function($params);

}$this->_in_progress = false;

return true;

}

原理**

個人實現版本

如果你覺得麻煩,甚至可以寫個方法都行,建議寫成乙個類,因為有些東西需要更多的資訊

/* 註冊鉤子 也可以叫做執行鉤子

* $class 類名稱

* $function 方法

* $param 方法引數

*/public function run_hook($class, $function, $param = array())

//返回當前已經所有的鉤子類和方法 不要當前方法呼叫這個核心類,需要稍微改造,在$hook_array[$key]['function']的返回方法名的時候

public function get_all_class()

}return $hook_array;}}

呼叫的某個類名

ff.class.php 的ss方法

public function ss()
另乙個版本

更方便呼叫

class hooks 

static public function run_hook($class, $function, $param = array())

}

使用

include 'hooks.class.php';

hooks::run_hook('ee', 'vv',$param =array());

當然也可以這麼訪問

$foo = new hooks();

$foo->run_hook('ee', 'vv',array());

$foo::run_hook('ee', 'vv',array());

自 php 5.3.0 起,可以用乙個變數來動態呼叫類。但該變數的值不能為關鍵字 self,parent 或 static。

鉤子是比較靈活的,可以額外增加乙個功能**,使**更整潔,比如在做什麼一些重要操作,建立訂單,在建立訂單之前需要做些什麼,在建立之後做些什麼,都可以使用鉤子

這樣**更加靈活

php中鉤子hook的實現原理

鉤子定義鉤子是程式設計裡乙個常見概念,非常的重要。它使得系統變得非常容易拓展,而不用理解其內部的實現機理,這樣可以減少很多任務作量 鉤子作用 鉤子函式可以截獲並處理其他應用程式的訊息。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函式先得到控制權。這時鉤子函式即可以加工處...

Gogs同步鉤子和web鉤子(php)

1.同個伺服器下的鉤子 a.設定gogs上的配置 export git work tree 根路徑 export git dir git cd git pull b.設定 下的git的分支拉取路徑 vi 根目錄路徑 git config 設定 git請求鏈結 帶賬號密碼 http 使用者名稱 密碼 ...

PHP的鉤子實現解析

php程式設計的鉤子實現,示例講解和解釋它們的作用,寫了乙個樣板的鉤子實現 鉤子是程式設計裡乙個常見的概念,非常的重要。它使得系統變得非常容易拓展 而不用理解其內部的實現機理,這樣可以減少很多任務作量 只要有乙個鉤子樣本,能很容易仿照第乙個鉤子快速的編寫第二個鉤子,這裡對鉤子進行乙個簡單的理解。下面...