我一直在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 .. logical)。但这并不清楚这种技术背后的想法是什么,为什么使用它以及它的名称是什么:)
我在Java编程中也见过这种技术但不幸的是我不太了解Java ...:/
答案 0 :(得分:3)
这是一个异常处理程序,用于处理$pdo->exec()
抛出的异常。
执行$pdo->exec()
时,可能会发生异常(代码无法正常运行),并且抛出(throw new PDOException('error!')
或类似)。它们将被抛到他们特定类型的第一个捕获。
在上面的示例中,您的catch() { ... }
数据块会捕获PDOException
的例外情况。如果您没有该块,它将冒泡到任何进一步的异常处理程序,如果不处理,将使您的应用程序崩溃。您将看到一些应用程序包含try{ ... }/catch(){ ... }
块包装其主要请求,因此未处理的异常将一直冒泡到(并处理)。
如果您需要清理代码或在捕获异常时必须运行的任何代码,可以使用finally { ... }
(但PHP at this stage does not support it)
如果要更改异常处理程序的行为,可以使用set_exception_handler()
。
答案 1 :(得分:1)
这是一种错误处理机制。如果出现问题,则抛出异常(在这种情况下,异常的类称为PDOException),并在代码的catch
部分中处理错误消息并可能清除可能在{{ 1}}阻止。
答案 2 :(得分:1)
你肯定应该知道一些关于OOP的事情:)
这是面向对象的管理错误的方法:在PHP中(如在Java中)意外情况(例如错误)是对象,与其他任何东西完全相同。 当一个方法(将其命名为methodA())调用导致某些意外情况时,不会返回false或只是终止程序“抛出异常”。这意味着该方法被中断,程序流被传递给调用“methodA()”方法的方法/函数,该方法有两个选项:向自己提供异常或管理异常。 Tha抓住keywork代表第二种方式:当你编写一些可能导致意外行为的代码时,你可以使用“try-catch”块来包围这段代码,就像上面的例子一样:如果方法调用抛出一个异常对象( catch子句中的类型)将跳过“try”块中的所有剩余代码,并执行“catch”块中的代码。其余代码将照常执行。
如果你没有捕获异常,你可以运行不同的行为:在PHP中它取决于你的php.ini文件,在JAVA中导致程序结束,在jsp中异常显示在屏幕上等等。实际上,在一个生产应用程序中,你应该总是在它们被抛出时捕获异常,除非你是绝对的,不会引发异常。
作为一个起点,请看一下:http://php.net/manual/en/language.exceptions.php