在PHP Try Catch块中引发异常

plupiseo  于 2022-11-28  发布在  PHP
关注(0)|答案(5)|浏览(161)

我在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块中抛出对象。
提前感谢!

icomxhvb

icomxhvb1#

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;
    */
  }
}
mnemlml8

mnemlml82#

要重新引发do

throw $e;

而不是消息。

nqwrtyyt

nqwrtyyt3#

只需从catch块中移除throw-将其更改为echo或以其他方式处理错误。
它不是告诉你对象只能在catch块中抛出,而是告诉你 * 只有对象 * 可以抛出,错误的位置在catch块中--这是有区别的。
在catch块中,你试图抛出你刚刚捕获的东西--这在这个上下文中没有什么意义--而你试图抛出的东西是一个字符串。
一个真实世界的类比是,你正在做的事情是接住一个球,然后试图把制造商的徽标扔到其他地方。你只能扔一个完整的对象,而不是对象的一个属性。

tez616oj

tez616oj4#

您尝试抛出string

throw $e->getMessage();

只能引发实现\Throwable的对象,例如\Exception
旁注:异常通常是定义应用程序的异常状态,而不是验证后的错误消息。

hc8w905p

hc8w905p5#

Throw需要一个由\Exception示例化的对象。只需要捕获的$e就可以实现。

throw $e

相关问题