我在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块中抛出对象。
提前感谢!
5条答案
按热度按时间icomxhvb1#
mnemlml82#
要重新引发do
而不是消息。
nqwrtyyt3#
只需从catch块中移除
throw
-将其更改为echo
或以其他方式处理错误。它不是告诉你对象只能在catch块中抛出,而是告诉你 * 只有对象 * 可以抛出,错误的位置在catch块中--这是有区别的。
在catch块中,你试图抛出你刚刚捕获的东西--这在这个上下文中没有什么意义--而你试图抛出的东西是一个字符串。
一个真实世界的类比是,你正在做的事情是接住一个球,然后试图把制造商的徽标扔到其他地方。你只能扔一个完整的对象,而不是对象的一个属性。
tez616oj4#
您尝试抛出
string
:只能引发实现
\Throwable
的对象,例如\Exception
。旁注:异常通常是定义应用程序的异常状态,而不是验证后的错误消息。
hc8w905p5#
Throw需要一个由
\Exception
示例化的对象。只需要捕获的$e
就可以实现。