繁体   English   中英

PHP挂钩函数

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM