gpt4 book ai didi

php - 为什么要在 php 中使用异常处理?

转载 作者:可可西里 更新时间:2023-11-01 12:31:04 25 4
gpt4 key购买 nike

我从事 PHP 编程已有很长时间了,但对 PHP 5 的了解并不多...我知道 PHP 5 中的异常处理已有一段时间了,但从未真正研究过它。在快速 Google 之后,使用异常处理似乎毫无意义 - 我看不出使用它比仅使用一些 if() {} 语句以及我自己的错误处理类或其他任何东西有什么好处。

一定有很多使用它的充分理由(我猜?!)否则它就不会被放入语言中(可能)。谁能告诉我它比仅使用一堆 if 语句或 switch 语句或其他东西有一些好处吗?

最佳答案

异常可以让你区分不同类型的错误,也非常适合路由。例如……

class Application
{
public function run()
{
try {
// Start her up!!
} catch (Exception $e) {
// If Ajax request, send back status and message
if ($this->getRequest()->isAjax()) {
return Application_Json::encode(array(
'status' => 'error',
'msg' => $e->getMessage());
}

// ...otherwise, just throw error
throw $e;
}
}
}

然后可以通过自定义错误处理程序处理抛出的异常。

由于 PHP 是一种松散类型的语言,您可能需要确保仅将字符串作为参数传递给类方法。例如……

class StringsOnly
{
public function onlyPassStringToThisMethod($string)
{
if (!is_string($string)) {
throw new InvalidArgumentException('$string is definitely not a string');
}

// Cool string manipulation...

return $this;
}
}

...或者如果您需要以不同的方式处理不同类型的异常。

class DifferentExceptionsForDifferentFolks
{
public function catchMeIfYouCan()
{
try {
$this->flyForFree();
} catch (CantFlyForFreeException $e) {
$this->alertAuthorities();
return 'Sorry, you can\'t fly for free dude. It just don\'t work that way!';
} catch (DbException $e) {
// Get DB debug info
$this->logDbDebugInfo();
return 'Could not access database. What did you mess up this time?';
} catch (Exception $e) {
$this->logMiscException($e);
return 'I catch all exceptions for which you did not account!';
}
}
}

如果在类似 Zend Framework 中使用事务:

class CreditCardController extends Zend_Controller_Action
{
public function buyforgirlfriendAction()
{
try {
$this->getDb()->beginTransaction();

$this->insertGift($giftName, $giftPrice, $giftWowFactor);

$this->getDb()->commit();
} catch (Exception $e) {
// Error encountered, rollback changes
$this->getDb()->rollBack();

// Re-throw exception, allow ErrorController forward
throw $e;
}
}
}

关于php - 为什么要在 php 中使用异常处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530206/

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