[PHP] 自定义错误处理详解编程语言

关闭掉默认的错误提示,注册自己的错误提示

Application.php

<?php 
class Application{ 
public static function main(){ 
header("content-type:text/html;charset=utf-8"); 
self::register(); 
self::router(); 
} 
//自动加载 
public static function loadClass($class){ 
$class=str_replace('//', '/', $class); 
$class="./".$class.".php"; 
require_once $class;         
} 
//pathinfo处理 
public static function router(){ 
if(isset($_SERVER['PATH_INFO'])){ 
$pathinfo=array_filter(explode("/", $_SERVER['PATH_INFO'])); 
for($i=1;$i<=count($pathinfo);$i++){ 
$key=isset($pathinfo[$i]) ? $pathinfo[$i] : ''; 
$value=isset($pathinfo[$i+1]) ? $pathinfo[$i+1] :""; 
switch ($i) { 
case 1: 
$_GET['m']=ucfirst($key); 
break; 
case 2: 
$_GET['c']=ucfirst($key); 
break; 
case 3: 
$_GET['a']=$key; 
break; 
default: 
if($i>3){ 
if($i%2==0){ 
$_GET[$key]=$value; 
} 
} 
break; 
} 
} 
} 
$_GET['m']=!empty($_GET['m']) ? ucfirst($_GET['m']) : 'Index'; 
$_GET['c']=!empty($_GET['c']) ? ucfirst($_GET['c']) : 'Index'; 
$_GET['a']=!empty($_GET['a']) ? $_GET['a'] : 'index'; 
$class="//Controller//{$_GET['m']}//{$_GET['c']}"; 
$controller=new $class; 
$controller->$_GET['a'](); 
} 
//致命错误回调 
public static function shutdownCallback(){ 
$e=error_get_last(); 
if(!$e) return; 
self::myErrorHandler($e['type'],'<font color="red">Fatal Error</font> '.$e['message'],$e['file'],$e['line']); 
} 
//错误处理 
protected static function myErrorHandler($errno,$errstr,$errfile,$errline){ 
list($micseconds,$seconds)=explode(" ",microtime()); 
$micseconds=round($micseconds*1000); 
$micseconds=strlen($micseconds)==1 ? '0'.$micseconds : $micseconds; 
$mes="[ ".date("Y-m-d H:i:s",$seconds).":{$micseconds} ] ".$errfile." ".$errline." line ".$errstr.'<br/>'; 
echo $mes;         
} 
//注册 
public static function register(){ 
error_reporting(0); 
set_error_handler(function($errno,$errstr,$errfile,$errline){ 
self::myErrorHandler($errno,$errstr,$errfile,$errline); 
}); 
register_shutdown_function(function(){ 
self::shutdownCallback(); 
}); 
spl_autoload_register("self::loadClass"); 
} 
} 
Application::main();

/Controller/Index/index.php

<?php 
namespace Controller/Index; 
use Service/User; 
class Index{ 
public function __construct(){ 
} 
public function index(){ 
0/0; 
mysql_connect(); 
new xxx(); 
} 
public function login(){ 
echo "login()"; 
} 
}

效果:

[PHP] 自定义错误处理详解编程语言

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/12594.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论