', $pos); $n = 3 > count($stack) ? count($stack) : 3; for ($i = 0; $i < $n; $i++) { echoLine($stack[$i]); } echoLine(); # 换个行 var_dump($obj); } /** * 浏览器输出调用堆栈 * @return void */ public static function print_stack_trace() { /* * * * * * 因为debug_print_backtrace()格式不太易读,自己调整下输出样式 * * * */ $html = self::get_call_stack(); self::debug($html); } /** * 尝试从array中取出一个命名变量, Ps.可以取消5.3中的Notice * @param arry $arr * @param string $strFieldName * @return mixed */ static private function arr_get($arr, $strFieldName) { if (isset($arr[$strFieldName])) { return $arr[$strFieldName]; } return null; } /** * 获得调用堆栈 * @param int $levelnum 想要获得的调用层次,default is 3 * @return string formated string */ static public function get_call_stack($levelnum = 3) { $array = debug_backtrace(); $outHtml = PHP_EOL; array_shift($array); # 移除get_call_stack函数自身 $n = 1; foreach ($array as $row) { $outHtml .= "\t" . CommUtil::str2UTF8(self::arr_get($row, 'file')) # windows下路径(gb2312)转码 . ', row: ' . self::arr_get($row, 'line') . ', method: ' # line . self::arr_get($row, 'function') . ";
" . PHP_EOL; # func if ($levelnum <= $n++) { break; } } return $outHtml; } /** * 浏览器弹窗提示 * @param string $msg */ public static function alert($msg) { if (self::isDebugging()) { echo ""; } } /** * 检查模块是否加载 * @param string[] $arr 要检查的模块名称 */ public static function checkModules($arr = array()) { $default = array(# # 基础模块 "curl", "mbstring", "openssl", "pdo_mysql", "sockets", "zlib", ); $r_modules = array_merge($default, $arr); # 合并指定模块 $diff = array_diff($r_modules, get_loaded_extensions()); # 判断缺失模块 if (count($diff)) { # 确实缺失模块 die("require modules: " . implode(' ,', $diff)); # 直接结束运行 } return true; # 返回true } /** * 检查PHP版本 * @param string $ver 最低版本字符串类似于7.3.5 */ public static function checkkPHPVersion($ver) { $default_ver = "5.4.16"; $r_ver = isset($ver) ? $ver : $default_ver; if (version_compare(PHP_VERSION, $r_ver, '<')) { die('This code request at least PHP version ' . $r_ver # . ', Current version: ' . PHP_VERSION . ".
" . PHP_EOL); } } }