首页 » 网站推广 » 切面编程监控php技巧_PHP代码追踪回溯

切面编程监控php技巧_PHP代码追踪回溯

访客 2024-11-15 0

扫一扫用手机浏览

文章目录 [+]

PHP供应了debug_backtrace和debug_print_backtrace两个方法,用于回溯跟踪代码,先来看下这两个方法如何利用:

debug_backtrace : /myworks/test/debug_backtrace.php

切面编程监控php技巧_PHP代码追踪回溯

<?phpclass backtrace{public function a($param){var_dump(debug_backtrace());}public function b($param1,$param2=null){$this->a($param1);}}$object = new backtrace();$object->b('param1','param2');

实行结果:

切面编程监控php技巧_PHP代码追踪回溯
(图片来自网络侵删)

array(2) {[0]=>array(7) {[\公众file\"大众]=>string(33) \公众/myworks/test/debug_backtrace.php\"大众[\"大众line\公众]=>int(9)[\"大众function\"大众]=>string(1) \公众a\公众[\公众class\"大众]=>string(9) \"大众backtrace\"大众[\"大众object\公众]=>object(backtrace)#1 (0) {}[\"大众type\"大众]=>string(2) \公众->\"大众[\公众args\"大众]=>array(1) {[0]=>&string(6) \"大众param1\公众}}[1]=>array(7) {[\"大众file\"大众]=>string(33) \"大众/myworks/test/debug_backtrace.php\"大众[\公众line\"大众]=>int(15)[\"大众function\公众]=>string(1) \公众b\公众[\公众class\"大众]=>string(9) \公众backtrace\"大众[\"大众object\公众]=>object(backtrace)#1 (0) {}[\"大众type\"大众]=>string(2) \"大众->\公众[\公众args\"大众]=>array(2) {[0]=>&string(6) \公众param1\公众[1]=>&string(6) \公众param2\公众}}}

debug_print_backtrace:/myworks/test/debug_print_backtrace.php

<?phpclass backtrace{public function a($param){debug_print_backtrace();}public function b($param1,$param2=null){$this->a($param1);}}$object = new backtrace();$object->b('param1','param2');

实行结果:

#0 backtrace->a(param1) called at [/myworks/test/debug_print_backtrace.php:9]#1 backtrace->b(param1, param2) called at [/myworks/test/debug_print_backtrace.php:15]

从上面两个demo的输出结果来看,这两个方法都自下而上(这里的自下而上是指调用链的最下层向上追踪)回溯跟踪调用情形,debug_backtrace着重按照层级构造返回结果集,debug_print_backtrace则直接打印出回溯跟踪,更多官方的案例阐明,参考 debug_backtrace 和 debug_print_backtrace

问题思考:在链路追踪系统中,我们常常追踪的不是一个方法的调用链情形,而利用上述两个方法,如果想要追踪回溯某个方法的调用链情形,都须要向该方法体内植入debug_backtrace或debug_print_backtrace方法,这在代码中看起来是十分臃肿的,特殊是在繁芜的业务代码中,掩护起来尤其头疼。
有什么办法可以无入侵或者少入侵地实当代码追踪回溯呢?这里供应两种减少代码入侵,并利于代码分割管理的方法:

魔术方法,重载:__call(),实例如下:

<?phpclass backtrace{public function __call($method,$args){$this->debug();return call_user_func_array([$this,$method],$args);}protected function a(){}protected function b(){}private function debug(){var_dump(debug_backtrace());}}$object = new backtrace();$object->b();$object->a();

上述代码就可以同时对方法a和方法b进行追踪回溯,基于这个思想,读者可以制订自己代码追踪回溯方案。

AOP

AOP的全称是Aspect Oriented Programming,即面向切面编程,PHP相对付JAVA而言,AOP的运用较少,JAVA中大家熟知的Spring就实现了AOP。
类似监控系统、全链路调用系统都是AOP的主要利用场景。
关于PHP措辞中利用AOP,可以拜会:http://aop-php.github.io/。
AOP用来封装横切关注点,详细可以不才面的场景中利用: Authentication(权限)、Caching(缓存)、Context passing(内容通报)、Error handling(缺点处理)、Lazy loading(

相关文章

今日头条算法引领个化信息时代的变革

信息爆炸时代已经到来。每个人都是信息的接收者和传播者。面对海量的信息,人们往往感到无所适从。为了解决这一问题,各大互联网公司纷纷推...

网站推广 2025-01-31 阅读1 评论0

今日头条算法信息推荐的秘密武器

信息爆炸的时代已经来临。人们每天都会接触到大量的信息,而如何从这些信息中筛选出有价值的内容,成为了亟待解决的问题。今日头条算法作为...

网站推广 2025-01-31 阅读1 评论0

今日头条算法精准推荐背后的技术奥秘

信息爆炸的时代已经来临。我们每天都要面对海量的信息,如何从这些信息中筛选出自己感兴趣的内容,成为了每个人都关心的问题。今日头条作为...

网站推广 2025-01-31 阅读1 评论0