[英]PHP Hook Function
我基本上可以做些什么:
register_function_hook('myFunctionHook');
因此,當運行任何功能時:
functionA(); //The hook runs myFunctionHook();
anoterFunction(); //The hook runs myFunctionHook();
Class::functionA(); //The hook runs myFunctionHook();
這樣的事情存在嗎?
-編輯-
我想要做的是對每個功能的持續時間進行細分。 就是 性能調優。 我想了解在沒有在我的Apache服務器上安裝xDebug的情況下要花費多少時間,但是我不知道是否有可能。
可以使用register_tick_function()
,也可以在PHP手冊上檢查以下注釋 :
$script_stats = array();
$time = microtime(true);
function track_stats(){
global $script_stats,$time;
$trace = debug_backtrace();
$exe_time = (microtime(true) - $time) * 1000;
$func_args = implode(", ",$trace[1]["args"]);
$script_stats[] = array(
"current_time" => microtime(true),
"memory" => memory_get_usage(true),
"file" => $trace[1]["file"].': '.$trace[1]["line"],
"function" => $trace[1]["function"].'('.$func_args.')',
"called_by" => $trace[2]["function"].' in '.$trace[2]["file"].': '.$trace[2]["line"],
"ns" => $exe_time
);
$time = microtime(true);
}
declare(ticks = 1);
register_tick_function("track_stats");
// the rest of your project code
// output $script_stats into a html table or something
這“鈎住”了一切,不僅是功能,而且我認為它符合您的目的。
不,這不是您喜歡的方式
但是您可以通過繼承實現一些目標。
class Vehicle {
function __construct() {
$this->hookFunction();
}
function hookFunction() {
//
}
}
class Car extends Vehicle {
}
Class Toyota extends Car {
}
new Toyota(); // will you hook function
// this exclude static call to member functions, or other inline functions.
您要找的是探查器。 PQP看起來像一個,是獨立的。
而不是污染代碼,您應該使用真正的探查器,例如xdebug提供的探查器。
不知道Topic Starter是否需要這個,但是也許其他人仍然可以從中受益。
有一個完全用PHP編寫的PHP庫,可讓您完全執行所需的操作。
這是一篇有關其工作原理的文章,包括源代碼: http : //phpmyweb.net/2012/04/26/write-an-awesome-plugin-system-in-php/
它允許您從要掛接的類中注冊函數。 因此,它基本上首先執行代碼,然后確定代碼執行后是否還要調用原始函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.