Mah*_*ver 10 php oop exception-handling
3天前,在阅读了很多关于使用OOP的优点之后,我开始使用类作为练习在OOP中重写我的一个脚本.
现在我很困惑天气我应该使用例外与否.他们似乎让我的工作更努力,更长久.
我的应用程序检查数据是否是通过Ajax请求发送的,然后通过脚本使用该信息.
检查此示例:
/*
* The older way
*/
if($ajaxEnabled) {
$error = errorWrap('Ajax error');
} else {
$error = errorWithBackLinkWrap('NoAjax error');
}
function doSomething() {
if(empty($POST['name'])) {
die($error);
}
}
/*
* OOP way
*/
class someClass {
private $_ajaxEnabled;
public function doSomething() {
try {
if(!$this->_isDateValid()) {
if($this->$_ajaxEnabled) {
throw new ajaxException('Ajax error');
} else {
throw new noAjaxException('NOAjaxError');
}
}
} catch(ajaxException $e) {
echo $e->getErrorMessage();
} catch(noAjaxException $e) {
echo $e->getErrorMessage();
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码仅用于演示问题,因此我知道其中有一些未定义的函数:).
所以在开始之前,错误处理对我来说更容易,因为我只需要回应相应的错误.
现在使用异常,在每个函数中我必须首先检查连接类型,然后为每个抛出的异常编写2个catch函数,这会导致更大的代码.
我在php中对OOP真的很新,所以也许有一个更清洁,更好的方法来做到这一点,是吗?
你的问题并不少见,是否/何时使用例外有时是一个哲学决定,许多有经验的开发人员无法围绕它.
话虽这么说,我发现列出每种处理错误方式的不同属性可以很容易地选择你喜欢的方式:
0意味着成功或失败?)何时使用:这很明显.当您信任调用者时使用返回代码(内部代码或可以安全忽略的普通错误).
try/catch)何时使用:如果您不信任您的呼叫者(第三方),或者您确实需要确保您的错误代码不会被忽略.
何时使用:通常很明显.你需要立即停止一切.
(在PHP环境中,我认为它没有多大区别.上述建议仍应适用.)
(在旁边)
通常情况下,当发生错误时(例如,当您学习的第一种编程语言是PHP:P时)写出错误消息是很诱人的.但是如果你真的想要理解OOP,那么它不是处理错误的正确方法.
理想情况下,每个对象或每个函数只应执行一个函数.如果一个函数将错误屏幕和做自己的事,很难在以后切换到DatabaseErrorLogger或TextFileErrorLogger或等等.一个办法是提供一个记录器使用(这叫做依赖注入).另一种方法是使用异常 - 这样,调用者可以选择ErrorLogger使用哪个.
| 归档时间: |
|
| 查看次数: |
1377 次 |
| 最近记录: |