在PHP Try Catch块中抛出exception

我在Drupal 6 .module文件中有一个PHP函数。 我正在尝试执行初始variablesvalidation之前执行更密集的任务(如数据库查询)。 在C#中,我曾经在我的Try块的开始实现IF语句,如果validation失败,会抛出新的exception。 抛出的exception将被捕获到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块你试图抛出一些你刚刚发现的东西 – 在这种情况下没有任何意义 – 而你试图抛出的东西是一个string。

一个现实世界的比喻,你正在做的是抓球,然后试图把制造商的标志只是在别的地方。 你只能扔整个对象,而不是对象的属性。

 throw $e->getMessage(); 

你试着扔一个string

作为旁注:例外通常是定义应用程序的exception状态,而不是validation后的错误消息。 它不是一个例外,当用户给你无效的数据