在 PHP Trycatch 块中引发异常

我在 Drupal 6中有一个 PHP 函数。模块文件。我试图在执行更密集的任务(比如数据库查询)之前运行初始变量验证。在 C # 中,我曾经在 Tryblock 的开头实现 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();
}
}

However, when I try to run the code, it's telling me that objects can only be thrown within the Catch block.

先谢谢你!

109087 次浏览

You tried to throw a string:

throw $e->getMessage();

您只能抛出实现 \Throwable的对象,例如 \Exception

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

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

它不是告诉你只能在 catch 块中抛出对象,而是告诉你可以抛出 只有物品,错误的位置在 catch 块中ーー这是有区别的。

在 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;

不是留言。

Throw needs an object instantiated by \Exception. Just the $e catched can play the trick.

throw $e