94hwan-PHP框架基本原理

Source:94hwan 与众不同  Author:网络部
2010-04-12 09:37

系统已把错误拦截到 lib_debug.php 的相关函数,在调试模式下,这里会对所有级别的错误在页面执行完之后显示出来,重点需注意下面几点:

1、模板裏盡量不要出現不確定的數組元素(通常是從request裏來的),否則容易引發未定義警告;

2、在使用 try{ ........ } cacth(){ ......... } 语句时,在 try 块里使用 throw new Exception 正常的抛出 throw,不过在 cacth 块里,不应该自行编写调试信息,而是用 trigger_error(错误原因);这样处理,在有必要 exit 的情况下可以退出,否则返回交由 debug 程序处理。例如:

  1. try 
  2.     { 
  3.         $controller_name = 'ctl_'.preg_replace("/[^0-9a-z_]/i"''$controller_name); 
  4.         $action = preg_replace("/[^0-9a-z_]/i"''$action); 
  5.  
  6.         $action = emptyempty ( $action ) ? $action = 'index' : $action
  7.  
  8.         $path = PATH_CONTROL . '/' . $controller_name . '.php'
  9.  
  10.         if (file_exists ( $path )) 
  11.         { 
  12.              require $path
  13.         } else { 
  14.              throw new Exception ( "Contrl {$controller_name} is not exists!" ); 
  15.         } 
  16.  
  17.         if (method_exists ( $controller_name$action ) === true) 
  18.         { 
  19.               $instance = new $controller_name ( ); 
  20.               $instance->$action (); 
  21.         } else { 
  22.               throw new Exception ( "Method {$action}() is not exists!" ); 
  23.         } 
  24.     } 
  25.     catch ( Exception $e ) 
  26.     { 
  27.         if (DEBUG_LEVEL === true) 
  28.         { 
  29.              trigger_error("Load Controller false!"); 
  30.         } else { 
  31.              header ( "location:/404.html" ); 
  32.              die (); 
  33.         } 
  34.     } 



3、在代码可能因为某些值导致出现在逻辑错误的地方,也判断一下,并用 trigger_error( 错误说明 ) 向错误调试程序返回一个错误信息,这样可以方便的实现程序的调试。

x、未能實現的代碼
由于 php 出现致命错误(Fatal error)时会强制中断程序,因此调试程序是无法跟踪这种情况的,此外,下面几种错误都是无法捕获的:
E_ERROR           => 致命错误
E_PARSE           => 解析错误
E_CORE_ERROR      => 核心致命错误
E_CORE_WARNING    => 核心警告
E_COMPILE_ERROR   => 编译致命错误
E_COMPILE_WARNING => 编译警告
虽然程序可以通过 ob_start 去控制缓存的输出,但这可能会导致内部程序编写逻辑混乱,因此并不对这些情况进行处理。

4、自定義性能追蹤函數
test_debug_mt( '位置说明' )
程序會在調試模式下程序結束時輸出相應位置的內存和與上一調用此函數位置間的間隔時間,這適用于可能占較大資源的性能追蹤
使用时需要在相应接口开始使用一次 test_debug_mt( '初始化' );  (主要考虑某些ajax等内部调用不方便输出测试信息)

5、xhprof 性能追踪系统
在Debug或客戶端安全模式下,系統會開啓xhprof性能跟蹤系統,此系統能跟蹤程序所有執行類及入口占用時間比例等信息(這個不會顯示內存信息)。
默认情况下,使用了 cls_template::display ($tpl, $is_debug_mt=true) 它会显示调试文字在底部,对于没有用这方法的程序,如果有必要,可以手动在程序结束处加上 debug_hanlde_xhprof(); 输出,此外,对于使用了cls_template::display,又不想输出任何调试信息的(通常是AJAX),可以指定第二个参数为 false。
 

...