首页 » PHP教程 » debugbacktracephp技巧_PHP代码追踪回溯

debugbacktracephp技巧_PHP代码追踪回溯

访客 2024-11-07 0

扫一扫用手机浏览

文章目录 [+]

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

debug_backtrace : /myworks/test/debug_backtrace.php

debugbacktracephp技巧_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');

实行结果:

debugbacktracephp技巧_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(

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0