PHP错误与异常

错误报告关闭和打开

php.ini 的 display_errors = On 或者 Off

代码里 ini_set(‘display_errors’,1) 或者 0


错误报告级别

PHP错误与异常_第1张图片

最佳实践

开发环境下打开错误报告。并且错误报告级别 E_ALL
正式环境一定要关闭错误报告

//显示所有的错误类型
error_reporting(E_ALL);

//显示所有的错误类型,除了NOTICE 提示之外
error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL &~ E_NOTICE);

//关闭所有的PHP错误报告
error_reporting(0);

//报告所有的错误类型
error_reporting(-1);

举例

try {
    //找不到文件
    throw new Exception('找不到文件',1);
    //没有权限访问
    throw new Exception('没有权限',2);
} catch (Exception $e) {
    $errno =  $e -> getCode();

    if($errno == 1){
        echo $e -> getFile();
    }elseif($errno == 2){
        echo $e -> getLine();
    }
}

文件异常类

class FileException extends Exception{
    public function fileInfo(){
        return $this->getMessage();
    }
}

try {
    print "open file";
    throw new FileException('file does not exist');
} catch (Exception $e) {
    print $e -> fileInfo();
}

捕获多个异常

class FileException extends Exception{}

//文件不存在的异常
class FileNotExistException extends FileException{}
//文件权限异常 
class FilePermissionException extends FileException{}

function fileHandle(){
    //文件不存在
    throw new FileNotExistException('file does not exist');

    //文件权限异常
    throw new FilePermissionException('access denied');

    //其他异常
    throw new FileException('other exception');
}
try {
    fileHandle();
} catch (FileNotExistException $e) {
    echo $e -> getMessage();
}catch(FilePermissionException $e){
    echo $e -> getMessage();
}catch(FileException $e){
    echo $e -> getMessage();
}

全局异常处理

php 
class FileException extends Exception{
    //文件不存在
    const FILE_NOT_EXIST = 1;
    //权限不够
    const FILE_PERMISSION = 2;
}

function fileHandle(){
    //文件不存在
    throw new FileException('FilenotExist',FileException::FILE_NOT_EXIST);

    //权限不够
    throw new FileException('FilePermission',FileException::FILE_PERMISSION);
}
try {
    fileHandle();
} catch (Exception $e) {
    switch ($e -> getCode()) {
        case FileException::FILE_NOT_EXIST:
            echo($e->getMessage());
            break;
        case FileException::FILE_PERMISSION:
            echo ($e -> getMessage());
            break;
    }
}catch(Exception $e){
    echo 'exception';
}
?>
------------------------------------------
php 
function defaultExceptionHandle($e){
    printf("uncaught exception:%s in file %s on line %d",$e->getMessage(),$e->getFile(),$e->getLine());
}

set_exception_handler('defaultExceptionHandle');
throw new Exception('tese......');
?>

你可能感兴趣的:(PHP错误与异常)