我基本上可以这样做:
register_function_hook('myFunctionHook');
所以当运行任何函数时:
functionA(); //The hook runs myFunctionHook();
anoterFunction(); //The hook runs myFunctionHook();
Class::functionA(); //The hook runs myFunctionHook();
这样的事情存在吗?
- 编辑 -
我想要做的是详细了解每个功能的持续时间。 IE浏览器。性能调优。我想知道在我的Apache服务器上没有安装xDebug所需的时间,但我不知道是否可能。
答案 0 :(得分:5)
可以使用 register_tick_function()
,也可以使用check this comment on the PHP manual:
$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
这与所有东西“挂钩”,不仅仅是功能,但我认为它符合你的目的。
答案 1 :(得分:3)
不,你不喜欢它
但是你可以用继承来实现目标。
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.
答案 2 :(得分:1)
你要找的是个探路者。而PQP看起来像是一个独立的。
答案 3 :(得分:1)
您应该使用真实的Profiler,而不是污染代码,就像xdebug提供的那样
答案 4 :(得分:-1)
不确定主题入门者是否需要这个,但也许其他人仍然可以从中受益。
有一个完全用PHP编写的PHP库,可以让你完全按照自己的意愿行事。
这是一篇关于它是如何工作的文章,包括源代码: http://phpmyweb.net/2012/04/26/write-an-awesome-plugin-system-in-php/
它允许您从要挂钩的类中注册一个函数。所以它基本上首先执行你的代码,然后你确定你的代码执行后你也想调用原始函数。