【问题标题】:Is there a static way to throw exception in php有没有一种静态方法在php中抛出异常
【发布时间】:2023-03-20 20:08:01
【问题描述】:

有没有“静态”的方式在 php 中抛出异常?

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

我试过了:

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

但它不起作用。

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

【问题讨论】:

  • “静态”是什么意思?
  • 静态我的意思是没有初始化一个类
  • 我希望这个无用的 'Query Failed' 语句只是一个示例,实际上你会在查询中添加一个实际错误
  • @Shrapnel 是的,我使用了 'Query Failed' 作为示例,实际上我还将使用 mysql_error() 放置实际错误

标签: php exception try-catch


【解决方案1】:

您将无法直接执行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);
}

【讨论】:

  • 命令式编程语言中的一切都是语句;)throw 是一种语言结构,因此它由解析器处理,无法在运行时评估为某些值,是的
【解决方案2】:

你也可以试试

mysql_query($query);

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

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

【讨论】:

    【解决方案3】:

    您链接到的评论指出以这种方式抛出异常是行不通的。它声明你必须将它放在一个函数中:

    function throwException($message = null, $code = null) {
        throw new Exception($message, $code);
    }
    
    $re = mysql_query($query) or throwException('Query Failed');
    

    【讨论】:

    • 是的。我正在寻找一种方法来做类似 Exception::setMessage(' Message ');但是现在我知道在 BoltClock 回复后这是不可能的
    • @rados:他说你在or 之后调用函数,但在你的问题中,你调用的是实际的throw 语句而不是函数。
    • @BoltClock 是的,我现在正在做的是这样的: $re=@mysql_query( $query) 或 IException::throwException(' Query Failed '); IException 是我自己制作的一个类,我正在寻找一个预定义的类而不是使用我自己的。
    猜你喜欢
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多