PHP的面向对象编程(OOP)的学习笔记(四)-异常处理类发生
PHP5添加异常处理模块类似于其他语言,PHP代码生成异常可以抛出由catch语句的语句和捕获。代码需要例外处理必须放在try代码块捕获例外。每个尝试对应至少一个catch块。使用多个catch可以捕获不同阶级的产生异常。当try代码块不再抛出一个异常或不匹配被捕获异常,PHP代码将继续在跳到最后抓执行。当然,PHP可以扔掉(扔)在catch代码块的例外。
预定义的例外
异常类是所有异常的基类,我们可以通过派生异常类派生自定义异常。
复制代码代码如下所示:
{例外
属性
受保护的字符串$消息;异常消息内容
受保护的int代码
受保护字符串$文件
受保护的int行;在异常文件中抛出行号。
方法
公共__construct(字符串{ $消息=国际
最后的公共字符串GetMessage(void) / /得到异常消息内容
最后的公开的例外getprevious(void) / /回链在例外
最后的公共属性获得按键的ASCII码(void) / /得到异常代码
最后的公共字符串GetFile(void) / /得到异常的程序文件名
最后公开int getline(void) / /获得文件中的异常代码
最后公开阵列gettrace(void) / /得到异常跟踪信息
最后gettraceasstring字符串(void) / /得到异常跟踪信息的字符串类型
公共字符串__tostring(void) / /异常对象转换为字符串
私人最终无效__clone(void) / /病人
}
当我们了解了异常之后,我们尝试扩展异常类来实现一个自定义异常。
复制代码代码如下所示:
connecttodatabase()函数
{
如果(!$link = mysql_connect(Myhost
{
抛出新的异常(无法连接到数据库;
}
}
尝试
{
connecttodatabase();
}
catch(例外E)
{ echo $ E -> GetMessage();
}
这里我们抛出一类异常类型异常并捕获catch中的异常,最后打印出来无法连接到数据库..也许您也想显示数据库连接失败的原因.我们的自定义信息在下面实现,并通过扩展异常类来实现。
复制代码代码如下所示:
类myexception延伸例外
{
保护ErrorInfo美元;
在一些逻辑结构函数中,将一些信息传递给基类。
公共功能__construct($消息=零,代码= 0美元)
{
美元-> ErrorInfo =错误信息的自定义错误类;
家长::__construct(美元的消息,美元的代码);
}
方法提供对自定义类信息的访问。
公共函数GetErrorInfo()
{
返回本- ErrorInfo;
}
*
*也可以在这里添加异常日志,只在上面的构造函数中调用。
*
* /
公共功能日志($文件)
{
file_put_contents(美元时,美元-> __tostring()(),file_append);
}
}
connecttodatabase()函数
{
把新的myexception(错误信息);
}
尝试
{
connecttodatabase();
}
抓住(myexception $ E)
{
echo $ E -> GetMessage()。;
echo $ E -> geterrorinfo();
}
set_exception_handler设置用户定义的异常处理程序
在函数调用时发生异常捕获的set_exception_handler.the函数的参数的名称必须在调用set_exception_handler定义(),该函数接受一个参数,这是一个被抛出的异常对象。这可以用来改善异常日志日志处理上面提到的。
复制代码代码如下所示:
功能exceptionlogger(美元除外)
{
文件大小= 'exceptionlog日志;
file_put_contents(美元时,美元__tostring异常>()(),file_append);
}
set_exception_handler(exceptionlogger);
1.3,PHP允许在catch代码块中抛出(抛出)异常。
复制代码代码如下所示:
尝试
{
#代码…
}
catch(例外E)
{
(如果)(a ->获得按键的ASCII码= 999)
{
#一些操作
}
其他的
{
扔E;
}
}
总结
异常是强大的,但不要认为我们可以滥用项目中的异常机制,特别是异常日志的广泛使用机制。这大大增加了系统的成本,降低了应用程序的性能,使用错误代码可以方便地管理错误信息。当错误消息被多次抛出时,使用错误代码是一个科学的选择。我们甚至可以允许错误消息通过错误代码支持多语言显示。