现在我很困惑天气我应该使用例外.他们似乎使我的工作更加努力和更长.
我的应用程序检查数据是否通过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(); } } }
这个代码只是为了演示这个问题,所以我知道这里有一些未定义的函数:).
所以在进行oop之前,错误处理对我来说更容易,因为我只需要回应相应的错误.
现在使用异常,在每个函数中,我必须首先检查连接的类型,然后为每个抛出的异常写入2个catch函数,这导致一个更大的代码.
话虽如此,我发现列出每种处理错误方式的不同属性可以轻松选择您喜欢的方式:
退货代码
>呼叫者可以忽略它,或忘记检查它
调用者通常需要更多的文档阅读才能使用它(0是意味着成功还是失败?)
>对象销毁不能保证 – 这一切都取决于调用者正确清理
何时使用:很明显当您信任来电者时,使用返回代码(内部代码或可以安全忽略的微不足道的错误).
例外
>呼叫者不能忽视它
>如果他想要(调用空的try / catch),调用者仍然可以抑制它
>对象销毁正确地进行 – 大部分时间
何时使用:当您不信任您的呼叫者(第三方)或您真的需要确保您的错误代码不被忽视.
死
>不能被忽略,不能被抑制
什么时候使用:通常很明显.你需要一切立即停止.
(在PHP的上下文中,我认为这不是很大的区别,上述建议仍然适用.)
(在旁边)
通常,当出现不良情况时,写出错误消息(特别是当您学习的第一种编程语言是PHP:P)时,这是很诱人的.但是,如果您真的想要填写OOP,那么它不是处理错误的正确方式.
理想情况下,每个对象或每个功能只能执行一个功能.如果一个函数将错误写入屏幕并执行自己的操作,则很难以后切换到DatabaseErrorLogger或TextFileErrorLogger等.一种方法是提供要使用的记录器(这称为依赖注入).另一种方法是使用异常 – 这样,调用者可以选择使用哪个ErrorLogger.