예외는 일반적인 프로그램 실행 중에 발생하는 다양한 유형의 오류를 처리하는 데 자주 사용됩니다. 예를 들어, 데이터베이스 연결을 할 때 데이터베이스 연결 실패를 처리해야 합니다. 예외를 사용하면 프로그램의 내결함성을 향상시켜 애플리케이션을 더욱 안정적이고 강력하게 만들 수 있습니다.
예외 사용
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!