类的自动加载后直接实例化
//自动加载类function my_autoloader($class) { include $class . 'Class.php';}spl_autoload_register('my_autoloader');$test=new test();$test->getvalue();
注意上述函数spl_autoload_register(array("Thinkphp","autoload"));则表示注册的函数是thinkphp类中autoload的方法
引入文件的时候直接写文件名称不需要添加路劲
/****set_include_path可以直接先设置path的值后面直接调用该路径下的文件**PATH_SEPARATOR文件分割转义**/set_include_path(get_include_path().PATH_SEPARATOR."C:/wamp/www/test/class/");include("AbstractTest.class.php");
设定错误和异常
// 设定错误和异常处理 register_shutdown_function(array('Think','fatalError')); set_error_handler(array('Think','appError')); set_exception_handler(array('Think','appException'));
register_shutdown_function 函数,可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会 被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了.我准备了一个非常基本的例子,可以演示在一个致 命错误需要显示时,你应该怎么给用户一些合适的反馈.
set_error_handler() 函数设置用户自定义的错误处理函数。
set_exception_handler()函数设置用户自定义的异常处理函数。
error_get_last该函数返回一个关于错误的数据信息数组
下面是异常处理的实例
' . $message . 'PHP:' . $logTrace; self::writeErrorLog($messageSave); } if ($show) { self::showError('system', "
'; $errorMsg .= self::sqlClear($exception->getSql(), $exception->getDbConfig()); $errorMsg .= '
'; } } else { $errorMsg = $exception->getMessage(); } $trace = $exception->getTrace(); krsort($trace); $trace[] = array('file' => $exception->getFile(), 'line' => $exception->getLine(), 'function' => 'break'); $phpMsg = array(); foreach ($trace as $error) { if (!empty($error['function'])) { $fun = ''; if (!empty($error['class'])) { $fun .= $error['class'] . $error['type']; } $fun .= $error['function'] . '('; if (!empty($error['args'])) { $mark = ''; foreach ($error['args'] as $arg) { $fun .= $mark; if (is_array($arg)) { $fun .= 'Array'; } elseif (is_bool($arg)) { $fun .= $arg ? 'true' : 'false'; } elseif (is_int($arg)) { $fun .= (defined('SITE_DEBUG') && SITE_DEBUG) ? $arg : '%d'; } elseif (is_float($arg)) { $fun .= (defined('SITE_DEBUG') && SITE_DEBUG) ? $arg : '%f'; } else { $fun .= (defined('SITE_DEBUG') && SITE_DEBUG) ? '\'' . htmlspecialchars(substr(self::clear($arg), 0, 10)) . (strlen($arg) > 10 ? ' ...' : '') . '\'' : '%s'; } $mark = ', '; } } $fun .= ')'; $error['function'] = $fun; } if (!isset($error['line'])) { continue; } $phpMsg[] = array('file' => str_replace(array(SITE_PATH, '\\'), array('', '/'), $error['file']), 'line' => $error['line'], 'function' => $error['function']); } self::showError($type, $errorMsg, $phpMsg); exit(); } /** * 记录错误日志 * * @static * @access public * @param string $message */ public static function writeErrorLog($message) { return false; // 暂时不写入 $message = self::clear($message); $time = time(); $file = LOG_PATH . '/' . date('Y.m.d') . '_errorlog.php'; $hash = md5($message); $userId = 0; $ip = get_client_ip(); $user = 'User: userId=' . intval($userId) . '; IP=' . $ip . '; RIP:' . $_SERVER['REMOTE_ADDR']; $uri = 'Request: ' . htmlspecialchars(self::clear($_SERVER['REQUEST_URI'])); $message = " \t{$time}\t$message\t$hash\t$user $uri\n"; // 判断该$message是否在时间间隔$maxtime内已记录过,有,则不用再记录了 if (is_file($file)) { $fp = @fopen($file, 'rb'); $lastlen = 50000; // 读取最后的 $lastlen 长度字节内容 $maxtime = 60 * 10; // 时间间隔:10分钟 $offset = filesize($file) - $lastlen; if ($offset > 0) { fseek($fp, $offset); } if ($data = fread($fp, $lastlen)) { $array = explode("\n", $data); if (is_array($array)) foreach ($array as $key => $val) { $row = explode("\t", $val); if ($row[0] != ' ') { continue; } if ($row[3] == $hash && ($row[1] > $time - $maxtime)) { return; } } } } error_log($message, 3, $file); } /** * 清除文本部分字符 * * @param string $message */ public static function clear($message) { return str_replace(array("\t", "\r", "\n"), " ", $message); } /** * sql语句字符清理 * * @static * @access public * @param string $message * @param string $dbConfig */ public static function sqlClear($message, $dbConfig) { $message = self::clear($message); if (!(defined('SITE_DEBUG') && SITE_DEBUG)) { $message = str_replace($dbConfig['database'], '***', $message); //$message = str_replace($dbConfig['prefix'], '***', $message); $message = str_replace(C('DB_PREFIX'), '***', $message); } $message = htmlspecialchars($message); return $message; } /** * 显示错误 * * @static * @access public * @param string $type 错误类型 db,system * @param string $errorMsg * @param string $phpMsg */ public static function showError($type, $errorMsg, $phpMsg = '') { global $_G; $errorMsg = str_replace(SITE_PATH, '', $errorMsg); ob_end_clean(); $host = $_SERVER['HTTP_HOST']; $title = $type == 'db' ? 'Database' : 'System'; echo << $title Error
$errorMsg
EOT; if (!empty($phpMsg)) { echo ' '; echo ' '; if (is_array($phpMsg)) { echo '
'; } echo << PHP Debug
'; echo 'No. | File | Line | Code |
' . $k . ' | '; echo '' . $msg['file'] . ' | '; echo '' . $msg['line'] . ' | '; echo '' . $msg['function'] . ' | '; echo '
|