>  기사  >  백엔드 개발  >  PHP 예외 처리 클래스 Exception 사용법에 대한 자세한 설명

PHP 예외 처리 클래스 Exception 사용법에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-06-30 09:37:597291검색

예외는 일반적인 프로그램 실행 중에 발생하는 다양한 유형의 오류를 처리하는 데 자주 사용됩니다. 예를 들어, 데이터베이스 연결을 할 때 데이터베이스 연결 실패를 처리해야 합니다. 예외를 사용하면 프로그램의 내결함성을 향상시켜 애플리케이션을 더욱 안정적이고 강력하게 만들 수 있습니다.

예외 사용

PHP5는 다른 언어와 유사한 예외 처리 모듈을 추가합니다. PHP 코드에서 생성된 예외는 throw 문에 의해 발생되고 catch 문에 의해 포착될 수 있습니다. 예외 처리가 필요한 코드는 가능한 예외를 포착하기 위해 try 코드 블록에 배치되어야 합니다. 각 시도는 하나 이상의 catch 블록에 해당합니다. 다양한 클래스에서 생성된 예외를 포착하려면 여러 catch를 사용하세요. try 블록이 더 이상 예외를 발생시키지 않거나 발생한 예외와 일치하는 catch가 없으면 PHP 코드는 마지막 catch로 점프한 후 계속 실행됩니다. 물론, PHP는 catch 블록 내에서 예외가 다시 발생하도록 허용합니다.

사전 정의된 예외

ExceptionException 클래스는 모든 예외의 기본 클래스입니다. Exception 클래스를 파생하여 사용자 정의 예외의 목적을 달성할 수 있습니다. 다음 목록에는 Exception에 대한 기본 정보가 나열되어 있습니다.

Exception {
    /* 属性 */
    protected string $message ;        //异常消息内容
    protected int $code ;            //异常代码
    protected string $file ;        //抛出异常的文件名
    protected int $line ;            //抛出异常在该文件中的行号
    /* 方法 */
    public construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )    //异常
构造函数
    final public string getMessage ( void )            //获取异常消息内容
    final public Exception getPrevious ( void )        //返回异常链中的前一个异常
    final public int getCode ( void )                //获取异常代码
    final public string getFile ( void )            //获取发生异常的程序文件名称
    final public int getLine ( void )                //获取发生异常的代码在文件中的行号
    final public array getTrace ( void )            //获取异常追踪信息
    final public string getTraceAsString ( void )    //获取字符串类型的异常追踪信息
    public string toString ( void )                //将异常对象转换为字符串
    final private void clone ( void )                //异常克隆
}

Exception을 이해한 후, 예외 클래스를 확장하여 사용자 정의 예외를 구현해 보겠습니다.

function connectToDatabase()
{    
    if(!$link = mysql_connect("myhost","myuser","mypassw","mybd"))
    {
        throw new Exception("could not connect to the database.");
    }
}
try
{
    connectToDatabase();
}
catch(Exception $e)
{echo $e->getMessage();
}

여기서 예외 유형 예외를 발생시키고 catch에서 이 예외를 포착한 다음 마지막으로 "데이터베이스에 연결할 수 없습니다."를 인쇄합니다. 데이터베이스 연결이 실패한 이유에 대한 정보도 표시하고 싶을 수도 있습니다. 다음으로, 예외 클래스를 확장하여 사용자 정의 정보를 구현합니다.

class MyException extends Exception
{
    protected $ErrorInfo;
    //构造函里处理一些逻辑,然后将一些信息传递给基类
    public function construct($message=null,$code=0)
    {
        $this->ErrorInfo = '自定义错误类的错误信息';
        parent::construct($message,$code);
    }    
    //提供获取自定义类信息的方法
    public function GetErrorInfo()
    {
        return $this->ErrorInfo;
    }
    /**
     *
     *这里还可以添加异常日志,只需在上面的构造函数里调用就可以了
     *
     */
    public function log($file)
    {
        
file_put_contents($fiel,$this->toString(),FILE_APPEND);
    }
}
function connectToDatabase()
{    
    throw new MyException("ErrorMessage");
}
try
{    
    connectToDatabase();
}
catch(MyException $e)
{    
    echo $e->getMessage() . "\n";
    echo $e->GetErrorInfo();
}

set_Exception_handler

사용자 정의 예외 처리 함수를 설정합니다. 잡지 못한 예외가 발생할 때 호출되는 함수 이름을 set_Exception_handler의 매개 변수로 지정합니다. 이 함수는 set_Exception_handler()를 호출하기 전에 정의되어야 합니다. 이 함수는 throw된 예외 개체인 하나의 매개 변수를 허용합니다. 이는 위에서 언급한 예외 로깅 처리를 개선하는 데 사용될 수 있습니다.

function ExceptionLogger($exception)
{
    $file='ExceptionLog.log';
    file_put_contents($fiel,$exception->toString(),FILE_APPEND);
}
set_exception_handler(ExceptionLogger);

1.3. PHP에서는 catch 코드 블록 내에서 예외가 다시 발생하도록 허용합니다.

try
{
    #code...
}
catch(Exception $e)
{
    if($e->getCode() == 999)
    {
        #进行一些操作
    }
    else
    {
        throw $e;
    }
}

Summary

예외 기능은 매우 강력하지만, 이는 프로젝트에서 예외 메커니즘, 특히 많은 수의 예외 로그를 ​​사용하는 메커니즘을 함부로 남용할 수 있다는 의미는 아닙니다. 이로 인해 시스템 오버헤드가 크게 증가하고 응용 프로그램의 성능을 저하시킵니다. 오류 코드를 사용하면 오류 메시지를 쉽게 관리할 수 있습니다. 오류 메시지가 여러 번 발생하는 경우 오류 코드를 사용하는 것이 과학적인 선택입니다. 오류 코드를 사용하여 오류 메시지를 여러 언어로 표시할 수도 있습니다.

위 내용은 PHP 예외 처리 클래스 Exception 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.