有没有一种静态方法在php中抛出异常

时间:2011-02-05 08:24:07

标签: php exception try-catch

是否存在在php中抛出异常的“静态”方式?

我需要在mysql查询失败时抛出异常。

我试过了:

$re=@mysql_query( $query ) or throw new Exception(' Query Failed ');

但它不起作用。

我正在使用基于throwException() function from this comment at PHP: Exceptions manual的函数,但我想知道是否有一种静态的方法可以在不创建类的情况下执行此操作。

3 个答案:

答案 0 :(得分:6)

您链接到的状态指出以这种方式抛出异常将无效。它声明你必须把它放在一个函数中:

function throwException($message = null, $code = null) {
    throw new Exception($message, $code);
}

$re = mysql_query($query) or throwException('Query Failed');

答案 1 :(得分:4)

您将无法直接执行or throw new Exception();,因为throw是一个陈述,而不是一个表达式。由于or实际上是一个运算符,因此它期望它的操作数是表达式(评估为某些值的东西)。

你必须这样做:

$re = mysql_query($query);

if (!$re) {
    throw new Exception('Query Failed');
}

如果您正在尝试使用该PHP手册评论提出的throwException()函数,那么webbiedave指出评论是说您需要直接调用该函数而不是throw语句,像这样:

$re = mysql_query($query) or throwException('Query Failed');

PHP中没有规则说你需要从类方法中抛出异常。只要有一些方法可以捕获该异常,你就可以了。如果你的意思是你想在不使用Exception类的情况下抛出异常,那么你必须这样做。例外是天生的对象;你不能抛出不是对象的异常(或者不从Exception类继承)。

如果您不想抛出异常但会引发您经常从PHP看到的错误类型(通知,警告和致命错误),请使用trigger_error()

$re = mysql_query($query);

if (!$re) {
    trigger_error('Query Failed', E_USER_ERROR);
}

答案 2 :(得分:2)

您也可以尝试类似

的内容
mysql_query($query);

if (mysql_error()) {
  throw new Exception(...);
}

如果没有错误,则mysql_error()返回空字符串,其结果为false