PHP 面向对象程序设计(oop)学习笔记 (四)
使用异常
PHP5 增加了类似其他语言的异常处理模块。在PHP代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入到 try 代码块内,以便捕获可能存在的异常。每个try至少对应一个 catch 块。使用多个 catch 可以捕获不同的类所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch 代码块内再次抛出(throw)异常。
预定义异常 Exception
Exception 类是所有异常的基类,我们可以通过派生 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 后,我们来尝试扩展 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();
}
这里我们抛出类一个 Exception 类型的异常,并在catch里捕获了这个异常,最终打印出了“could not connect to the database.”。或许你想还想显示数据库连接失败的原因信息。下面及通过扩展exception类来实现我们的自定义信息。
复制代码 代码如下:
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()之前被定义。该函数接受一个参数,该参数是一个抛出的异常对象。这可以用来改进上边提到的异常记录日志处理。
复制代码 代码如下:
function ExceptionLogger($exception)
{
$file='ExceptionLog.log';
file_put_contents($fiel,$exception->__toString(),FILE_APPEND);
}
set_exception_handler(ExceptionLogger);
1.3、PHP 允许在 catch 代码块内再次抛出(throw)异常。
复制代码 代码如下:
try
{
#code...
}
catch(Exception $e)
{
if($e->getCode() == 999)
{
#进行一些操作
}
else
{
throw $e;
}
}
总结
异常的功能非常强大,但是不以为着我们可以在项目中肆意的滥用异常机制,特别是大量使用异常日志的机制,这回大大增加系统系统开销降低应用程序的性能。利用错误代码我们可以方便的对错误信息进行管理,当一个错误信息被多次平抛出时,使用错误代码是科学的选择。我们甚至可以通过错误代码来让错误消息也支持多语言显示。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java에서는 여러 스레드가 동시에 컬렉션 개체를 작동하는 경우 ConcurrentModificationException 예외가 발생할 수 있습니다. 이 예외는 일반적으로 요소를 수정하거나 삭제할 때 컬렉션을 순회할 때 발생하며 이로 인해 컬렉션 상태가 일관되지 않아 비정상이 발생합니다. . 이 기사에서는 이 예외의 원인과 해결 방법을 살펴보겠습니다. 1. 예외 발생 원인 일반적으로 ConcurrentModificationException 예외

Java에서 UnsupportedEncodingException을 처리하는 방법은 무엇입니까? Java 프로그래밍에서는 UnsupportedEncodingException이 발생할 수 있습니다. 이 예외는 일반적으로 잘못된 인코딩 변환이나 지원되지 않는 인코딩으로 인해 발생합니다. 이번 글에서는 UnsupportedEncodingException 예외가 발생하는 원인과 처리 방법을 소개하겠습니다. 지원되지 않는 E란 무엇입니까?

PHP 개발 시 "PHPFatalerror:UncaughtException'PDOException'"과 같은 오류가 발생할 수 있습니다. 이는 PHP가 데이터베이스를 작동할 때 오류로 인해 발생하는 예외입니다. 이 오류를 제때 처리하지 않으면 프로그램이 중단되거나 예상치 못한 오류가 발생할 수 있습니다. 그렇다면 이 문제를 해결하는 방법은 무엇입니까? 다음은 몇 가지 일반적인 솔루션입니다. 1. 데이터베이스 매개변수를 확인합니다. 먼저 데이터베이스에 연결할 때 전달되는 매개변수를 확인해야 합니다.

Java에서 ConcurrentModificationException의 일반적인 원인은 무엇입니까? Java 컬렉션 프레임워크에서 반복자를 사용하여 컬렉션을 순회할 때 일반적인 Java 예외 중 하나인 ConcurrentModificationException 예외가 발생하는 경우가 있습니다. 그렇다면 이 예외의 이유는 무엇입니까? 먼저, Java 컬렉션 프레임워크에서 제공하는 반복자가 상태 저장이라는 점을 이해해야 합니다. 즉, 횡단할 때

Java 프로그래밍에서 배열은 중요한 데이터 구조입니다. 배열은 단일 변수에 여러 값을 저장할 수 있으며, 더 중요한 것은 인덱스를 사용하여 각 값에 액세스할 수 있다는 것입니다. 그러나 배열 작업을 하는 동안 몇 가지 예외가 발생할 수 있으며 그 중 하나가 ArrayStoreException입니다. 이 문서에서는 ArrayStoreException 예외의 일반적인 원인에 대해 설명합니다. 1. 유형 불일치 배열 생성 시 요소 유형을 지정해야 합니다. 호환되지 않는 데이터 유형을 배열에 저장하려고 하면 오류가 발생합니다.

Exception 클래스와 Error 클래스는 모두 java.lang.Throwable 클래스의 하위 클래스입니다. 런타임 예외는 처리할 수 있지만 오류는 처리할 수 없습니다. 예외는 런타임 시 발생하는 논리적 오류를 나타내는 객체로, 이로 인해 JVM이 "모호한" 상태로 전환됩니다. 이러한 런타임 오류를 나타내기 위해 JVM에서 자동으로 생성된 객체를 예외라고 합니다. Error는 합리적인 응용 프로그램이 포착하려고 시도해서는 안 되는 심각한 문제를 나타내는 Throwable 클래스의 하위 클래스입니다. 이러한 오류의 대부분은 예외입니다. 예외가 발생하면 try 및 catch 블록을 사용하여 이를 처리할 수 있습니다. 처리할 수 없는 오류가 발생하면 프로그램이 종료됩니다. 예외에는 두 가지 유형이 있습니다. 하나는 CheckedExce입니다.

Java 개발에서는 배열의 편의성과 성능상의 이점 때문에 배열을 사용하여 일련의 데이터를 저장하는 경우가 많습니다. 그러나 배열을 사용하는 과정에서 일부 예외가 발생하는데, 일반적인 예외 중 하나가 ArrayStoreException입니다. 이 예외는 호환되지 않는 데이터 유형을 배열에 저장할 때 발생합니다. 이번 글에서는 ArrayStoreException이 무엇인지, 왜 발생하는지, 해결 방법은 무엇인지 소개하겠습니다. 1. 도착

UnsupportedEncodingException은 주로 인코딩이 지원되지 않기 때문에 Java에서 발생할 수 있습니다. 텍스트 데이터를 처리할 때 인코딩 변환, 즉 한 인코딩 형식의 콘텐츠를 다른 인코딩 형식의 콘텐츠로 변환해야 하는 경우가 종종 있습니다. 인코딩 변환에 사용된 인코딩 유형이 지원되지 않으면 UnsupportedEncodingException이 발생합니다. 이 기사에서는 이 예외에 대한 해결책을 소개합니다. 하나,
