remington_young 发表于 2017-4-2 11:37:50

给PHP的调试加一个TRACE

  用过VC++一类的人,都非常喜欢其中的TRACE。但PHP没有,只有echo,print_r,而这些函数的坏处在于,程序发布时,要记得删除或注解掉它。
  记得SYMFONY可以在专用的DIV中输出调试与出错信息,但出错并不是我想要调试时输出的东西。仍是不够方便。
  其实,自己加一个。也就方便了。可惜的是,这玩艺在任一开发框架中都没有(只有我写的框架中才有)。加一个并不复杂的。
  就是全局函数。但这个全局函数,因为是有条件函数。所以,必须是用嵌套函数定义。比如以下代码:

      $debug = App::getInstance()->config['debug'];
if ($debug===true){
if (!function_exists('trace')){ //specially for ajax debug!!
function trace($var){
$string=print_r($var,true);
require_once(ERHDIR.'../Logger/Logger.class.php');
Logger::getInstance()->logg('INFO',
"/*************************** BEGIN INFO BY TRACE: ***************************\r\n"
.$string
."/***************************END INFO BY TRACE   ***************************\r\n" );
if(! isset($_SERVER['HTTP_X_REQUESTED_WITH']))
echo($string);
}
}            
}else{
if (!function_exists('trace')){ //specially for ajax debug!!
function trace($var){
$string=print_r($var,true);
require_once(ERHDIR.'../Logger/Logger.class.php');
Logger::getInstance()->logg('INFO',
"/*************************** BEGIN INFO BY TRACE: ***************************\r\n"
.$string
."/***************************END INFO BY TRACE   ***************************\r\n" );
}
}
}
  上述代码,要嵌入你的应用核心类的某个构造函数或初始化函数中。能够获得应用的调试标志。能够得到日志的输出接口。这样,代码就成了。
  接下来,只要你想调试,你一概不需要用echo, print_r了,你只要用 trace(你要查看的变量);这个语句就可以了。
  好处在何处?因为,你程序中是有可能用到echo的。是否会用到print_r不清楚。
  但你程序发布时,只要修改应用的debug标志,就不会有意外的页面输出了。同时,清理代码也很容易,全站点文件搜索一下trace,或替换trace为//trace就OK了。多方便呀!!!!
  当然,上面代码有些笨拙。你也大可以直接定义全局函数。所有判断完全在trace函数内部实现。       
页: [1]
查看完整版本: 给PHP的调试加一个TRACE