常州这边的公司用的框架是09年写的,二年了,所以有了重写的冲动!
新版框架采用php5的autoload类自动加载机制,使应用开发时无需require相应的文件,非常爽
[codesyntax lang=”php”]
/** * * php5自动加载类功能函数 * @param string $class_name */ function loader($class_name){ $expandCfg=cfg('expand'); if(!empty($expandCfg) && in_array($class_name,array_keys($expandCfg))){ $classFile=$expandCfg[$class_name]; }else{ $classArr = preg_split("/(?=[A-Z])/", $class_name); $classSysArr=array('dao','module','base','core','parent'); $classArrLast=strtolower($classArr[count($classArr)-1]); if(in_array($classArrLast, $classSysArr)){ if('base'==$classArrLast || 'core'==$classArrLast){ $classFile=CORE_PATH.strtolower($classArr[0]).'.'.$classArrLast.'.class.php'; }elseif('parent'==$classArrLast){ $classFile=SITE_PATH.$classArrLast.'/'.strtolower($classArr[0]).'.'.$classArrLast.'.class.php'; }else{ $classFile=INCLUDE_PATH.$classArrLast.'/'.strtolower($classArr[0]).'/'.strtolower($classArr[0]).'.'.strtolower($classArr[1]).'.'.strtolower($classArr[2]).'.class.php'; } //debug($classFile); } unset($classArr,$classArrLast); } if(isset($classFile) && file_exists($classFile)){ include($classFile); } } spl_autoload_register('loader');
[/codesyntax]
另框架在上线后,自动把运行时的错误信息存log文件
[codesyntax lang=”php”]
register_shutdown_function('error_handler'); /** * * 判断当前页是否来自ajax提交 */ function is_ajax() { if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && trim($_SERVER['HTTP_X_REQUESTED_WITH']) == 'XMLHttpRequest'){ return true; }else{ return false; } } function error_handler() { if(isset($run_count) && $run_count === 1) return false; static $run_count = 1; // 获取错误信息 $error_array = error_get_last(); // 对notice级的错误进行清除 if($error_array['type'] == 8) { $error_array = array(); } if(empty($error_array) === false) { $url = htmlspecialchars($_SERVER['REQUEST_URI']); // 当前请求访问url地址, $date = date('Y-m-d H:i:s',time()); // 当前时间 $error = implode(' | ',$error_array); // 将错误代码全部转化为数据. file_put_contents(PATH.'/log/error'.date('Y_m_d').'.txt',"$date|$url,$error; \r\n",FILE_APPEND); // 写入日志文件中. 保护一行一条, 并且循环增加开启. } }
[/codesyntax]