[英]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.