常州这边的公司用的框架是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]