首页 > 语言 > PHP > 正文

php debug_backtrace、debug_print_backtrace和匿名函数

2024-09-04 11:48:43
字体:
来源:转载
供稿:网友

debug_print_backtrace,与之不同的是它会直接打印回溯信息.

debug_print_backtrace() 是一个很低调的函数,很少有人注意过它.

不过当我对着一个对象调用另一个对象再调用其它的对象和文件中的一个函数出错时,它正在一边笑呢.

debug_print_backtrace() 可以打印出一个页面的调用过程,从哪儿来到哪儿去一目了然.不过这是一个PHP5的专有函数,好在pear中已经有了实现.

一、debug_backtrace 它可以回溯跟踪函数的调用信息,可以说是一个调试利器,代码如下:

  1. one();  
  2. function one() {    two();     }  
  3. function two() {    three();  }  
  4. function three() {    print_r( debug_backtrace() );   }  
  5. /*输出:  
  6. Array(  
  7.      [0] => Array        (  
  8.             [file] => D:apmservwwwhtdocstestdebugindex.php  
  9.             [line] => 10  
  10.             [function] => three  
  11.             [args] => Array                (                )  
  12.       ),  
  13.       [1] => Array        (  
  14.            [file] => D:apmservwwwhtdocstestdebugindex.php  
  15.            [line] => 6  
  16.            [function] => two  
  17.            [args] => Array                (                )  
  18.       ),  
  19.       [2] => Array        (  
  20.            [file] => D:apmservwwwhtdocstestdebugindex.php  
  21.            [line] => 3  
  22.            [function] => one  
  23.            [args] => Array                (                )  
  24.       )  
  25. )*/ 

二、debug_print_backtrace 它与之不同的是它会直接打印回溯信息.

三、匿名函数

从PHP 5.3开始新增了匿名函数(Anonymous functions),也叫闭包函数(closures),关键字 use 同时也在匿名函数中.

先看一下匿名函数的示例,作为回调函数的参数,代码如下:

  1. <?php  
  2. echo preg_replace_callback('~-([a-z])~'function ($match) {  
  3.     return strtoupper($match[1]);  
  4.     }, 'hello-world' 
  5. );  
  6. // 输出 helloWorld  
  7. ?> 

连接闭包和外界变量的关键字:USE

闭包可以保存所在代码块上下文的一些变量和值,PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字,代码如下:

  1. function test(){  
  2.     $num = 2;  
  3.     $array = array(1,2,3,4,5,6,7,8);  
  4.     print_r(array_filter($arrayfunction($param)  use ($num){  
  5.     return $param % intval($num) ==0; })  
  6. );} //开源代码Vevb.com 
  7. test();

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表