gpt4 book ai didi

php - PHP 中的异常真的那么有用吗?

转载 作者:可可西里 更新时间:2023-10-31 22:41:26 25 4
gpt4 key购买 nike

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();
}
}
}

这段代码只是为了演示问题,所以我知道其中有一些未定义的函数:)。

所以在 oop 之前,错误处理对我来说更容易,因为我只需要回显适当的错误。

现在使用异常,在每个函数中我必须首先检查连接类型,然后为每个抛出的异常编写 2 个 catch 函数,这导致代码更大。

我对 php 中的 OOP 真的很陌生,所以也许有一种更干净、更好的方法来做到这一点,是吗?

最佳答案

您的问题并不少见,是否/何时使用异常有时是一个哲学上的决定,许多有经验的开发人员无法解决这个问题。

话虽如此,我发现列出每种错误处理方式的不同属性可以让您轻松选择自己喜欢的方式:

返回码

  • 来电者可以忽略它或忘记检查它
  • 调用者通常需要阅读更多文档才能使用它(0 是成功还是失败?)
  • 不能保证对象销毁——这完全取决于调用者是否正确清理

何时使用:非常明显。当您信任调用者时使用返回代码(内部代码或可以安全忽略的小错误)。

异常(exception)情况

  • 来电者不能忽略它
  • 调用者仍然可以根据需要抑制它(使用空的 try/catch)
  • 对象销毁发生在适当的地方——大多数时候

何时使用:当您不太信任调用者(第三方)或者您真的需要确保您的错误代码不会被忽略时.

  • 不可忽视,不可压制

何时使用:通常很明显。你需要立即停止一切。

(在 PHP 上下文中,我认为这没有太大区别。上述建议仍然适用。)


(旁白)

通常情况下,当发生不好的事情时(尤其是当您学习的第一门编程语言是 PHP :P 时),很容易写出一条错误消息。但是,如果您真的想理解 OOP,那么这不是处理错误的正确方法。

理想情况下,每个对象或每个功能都应该只执行一个功能。如果一个函数将错误写入屏幕并且做它自己的事情,以后就很难切换到DatabaseErrorLoggerTextFileErrorLogger等。一种方法将是提供一个记录器来使用(这称为依赖注入(inject))。另一种方法是使用异常——这样,调用者就可以选择要使用的 ErrorLogger

关于php - PHP 中的异常真的那么有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3549344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com