PHP 中的“catch 块”是什么?

问题描述 投票:0回答:3

我在 PHP 中时不时地看到这样的代码,我想知道这到底是怎么回事。

$pdo = new PDO ($connect_string, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
    $pdo->exec ("QUERY WITH SYNTAX ERROR");
} 
catch (PDOException $e) {
    echo $e->getMessage();
}

我感兴趣的是一般的

catch (PDOException $e)
代码。 我 var_dump 异常,它返回 PDOException 类(doh..逻辑)。但这并不清楚这项技术背后的想法是什么,为什么使用它以及它的名字是什么:)

我也在 Java 编程中看到过这种技术,但不幸的是我不太了解 Java...:/

php exception
3个回答
3
投票

这是一个异常处理程序,用于处理

$pdo->exec()
引发的异常。

当您执行

$pdo->exec()
时,可能会发生异常(代码未按预期运行),并且它们会被 thrown (与
throw new PDOException('error!')
或类似的情况)。它们将被扔到其特定类型的第一个捕获处。

在上面的示例中,您的

catch() { ... }
块将捕获
PDOException
的异常。如果您没有该块,它将冒泡到任何进一步的异常处理程序,如果不处理,将使您的应用程序崩溃。您将看到一些应用程序有一个
try{ ... }/catch(){ ... }
块包装其主要请求,因此未处理的异常将一直冒泡到它(并被处理)。

如果您需要清理代码或在捕获异常时必须运行的任何代码,您可以使用

finally { ... }
(但现阶段的PHP不支持它)。

如果您想更改异常处理程序的行为,可以使用

set_exception_handler()


1
投票

这是一种错误处理机制。如果出现问题,则会引发异常(在本例中,异常的类称为 PDOException),并且在代码的

catch
部分中,您处理错误消息并可能清理
try
块中可能发生的混乱.


1
投票

你绝对应该了解一些 OOP :)

这是管理错误的面向对象方法:在 PHP 中(如在 Java 中),意外情况(例如错误)是对象,就像其他任何情况一样。 当方法(命名为 methodA() )调用导致一些意外情况时,不是返回 false 或只是终止程序,而是“引发异常”。这意味着该方法被中断,程序流被传递到调用“methodA()”方法的方法/函数,该方法有两个选项:抛出异常或对其进行管理。 catch keywork 代表第二种方式:当你编写一些可能导致意外行为的代码时,你可以用“try-catch”块包围这段代码,就像上面的例子一样:如果方法调用抛出一个异常对象( catch 子句中的类型)将跳过“try”块中的所有剩余代码,并执行“catch”块中的代码。其余代码将正常执行。

如果您没有捕获异常,您可以以不同的行为运行:在 PHP 中,它取决于您的 php.ini 文件,在 JAVA 中,它会导致程序结束,在 jsp 中,异常会显示在屏幕上,等等。实际上,在生产应用程序中,当异常可能被抛出时,您应该始终捕获异常,除非您绝对确定不会引发异常。

作为起点,看看这个:http://php.net/manual/en/language.exceptions.php

© www.soinside.com 2019 - 2024. All rights reserved.