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

sre*_*ith 7 php exception try-catch

是否有一种在PHP中抛出异常的"静态"方式?

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

我试过这个:

$re=@mysql_query( $query ) or throw new Exception(' Query Failed ');
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我正在使用一个基于PHPthrowException()评论中函数的函数:Exceptions手册,但我想知道是否有一种静态方法可以在不创建类的情况下执行此操作.

web*_*ave 6

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

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

$re = mysql_query($query) or throwException('Query Failed');
Run Code Online (Sandbox Code Playgroud)


Bol*_*ock 4

您将无法直接执行操作,or throw new Exception();因为它throw是一个语句,而不是一个表达式。由于or确实是一个运算符,因此它期望其操作数是表达式(计算结果为某些值的东西)。

你必须这样做:

$re = mysql_query($query);

if (!$re) {
    throw new Exception('Query Failed');
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试使用throwException()该 PHP 手动注释提出的函数,正如 webbiedave 指出的那样,该注释表示您需要调用该函数而不是throw直接调用该语句,如下所示:

$re = mysql_query($query) or throwException('Query Failed');
Run Code Online (Sandbox Code Playgroud)

PHP 中没有任何规则规定您需要从类方法中抛出异常。只要有某种方法可以捕获该异常,就可以了。如果您的意思是想在不使用该类的Exception情况下抛出异常,那么您必须这样做。例外是本质上的对象;您不能抛出不是对象(或不从Exception类继承)的异常。

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

$re = mysql_query($query);

if (!$re) {
    trigger_error('Query Failed', E_USER_ERROR);
}
Run Code Online (Sandbox Code Playgroud)