在PHP Try Catch块中抛出异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PHP Try Catch块中抛出异常相关的知识,希望对你有一定的参考价值。

我在Drupal 6 .module文件中有一个php函数。我正在尝试在执行更密集的任务(例如数据库查询)之前运行初始变量验证。在C#中,我曾经在我的Try块的开头实现了IF语句,如果验证失败则会抛出新的异常。抛出的异常将在Catch块中捕获。以下是我的PHP代码:

function _modulename_getData($field, $table) {
  try {
    if (empty($field)) {
      throw new Exception("The field is undefined."); 
    }
    // rest of code here...
  }
  catch (Exception $e) {
    throw $e->getMessage();
  }
}

但是,当我尝试运行代码时,它告诉我对象只能在Catch块中抛出。

提前致谢!

答案
function _modulename_getData($field, $table) {
  try {
    if (empty($field)) {
      throw new Exception("The field is undefined."); 
    }
    // rest of code here...
  }
  catch (Exception $e) {
    /*
        Here you can either echo the exception message like: 
        echo $e->getMessage(); 

        Or you can throw the Exception Object $e like:
        throw $e;
    */
  }
}
另一答案

要重新做

 throw $e;

不是消息。

另一答案

只需从catch块中删除throw - 将其更改为echo或以其他方式处理错误。

它没有告诉你只能在catch块中抛出对象,它告诉你只能抛出对象,并且错误的位置在catch块中 - 存在差异。

在catch块中,你试图抛出你刚抓到的东西 - 在这种情况下无论如何都没有意义 - 而你试图抛出的东西是一个字符串。

你正在做的事情的真实世界类比是接球,然后试图在其他地方抛出制造商的标志。您只能抛出整个对象,而不是对象的属性。

另一答案
throw $e->getMessage();

你试着扔一个string

作为旁注:例外通常是定义应用程序的异常状态,而不是验证后的错误消息。当用户为您提供无效数据时,也不例外

另一答案

投掷需要Exception实例化的对象。只有$e捕获可以发挥作用。

throw $e

以上是关于在PHP Try Catch块中抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

php的异常处理,一个try代码块中抛出了多个异常,怎么全都捕获,并输出来?下面的代码为只输出一个异常?

在 try 块中抛出异常后,catch 块不会立即执行

JAVA语言如何进行异常处理,关键字throws,throw,try,catch,finally分别代表啥意义在try块中抛出异常吗

若catch中抛出运行时异常,请问在try catch语句块中return语句是写在try中还是写在try catch语句外。

在 finally 块中抛出异常

在线程中处理在 catch 块中抛出的异常的最佳实践。 (。网)