Php 抛出异常和返回类型

Php 抛出异常和返回类型,php,exception-handling,Php,Exception Handling,在抛出新异常时,如果不需要抛出异常,最好只返回true。或者,最好返回false,而不是抛出异常。我正在使用php。这完全取决于你在做什么。就我个人而言,我一直在使用它们,这样我就不必检查返回值(一个愚蠢但说明性的示例): 这样,我可以做到: $array = array('foo' => 'bar'); try { echo ArrayToObject($array)->foo; //Prints "bar" } catch (Exception $e) { //H

在抛出新异常时,如果不需要抛出异常,最好只返回true。或者,最好返回false,而不是抛出异常。我正在使用php。

这完全取决于你在做什么。就我个人而言,我一直在使用它们,这样我就不必检查返回值(一个愚蠢但说明性的示例):

这样,我可以做到:

$array = array('foo' => 'bar');
try {
    echo ArrayToObject($array)->foo; //Prints "bar"
} catch (Exception $e) {
    //Handle error here
}
它让您不必担心检查结果时出错。您可以在catch块中正确处理错误

因此,不,不要根据异常更改要返回的内容。。。让异常为您处理错误和更改的工作流

一个更真实的示例(在伪代码中):


显然,这是假设数据库函数/方法抛出这些异常…

这取决于函数的用途和返回的原因。 在错误/意外情况下,使用异常从函数返回。对标准操作使用返回值

同样,不要使用返回值来标记意外情况。如果你的功能 对于空指针引用,除以零,没有数据连接,将不会返回任何有意义的内容,您应该抛出异常。第一,它让您可以用catch块隔离错误处理代码。第二,它可以让你提供更多的信息来解释为什么失败,而不仅仅是“错误”。当某件事情失败时,你得到的只是“错误”信息,这很烦人

此外,您不希望抛出异常作为流控制的替代方法。您可以创造性地编写一个比较函数,如果它相等,则不执行任何操作;如果它不相等,则抛出一个更大的ThanException或更小的ThanException。但是,现在您已经失去了分离错误处理代码的优势(因为标准处理代码现在与错误代码一起包含在catch块中)。此外,虽然我不确定在许多环境(如php)中异常处理的性能,但创建异常对象并对catch块进行类型比较可能比仅返回更昂贵

$array = array('foo' => 'bar');
try {
    echo ArrayToObject($array)->foo; //Prints "bar"
} catch (Exception $e) {
    //Handle error here
}
try {
    open database connection;
    send query to database;
    operate on results;
} catch (DatabaseConnectionException $e) {
    handle failed connection here;
} catch (DatabaseQueryException $e) {
    handle failed query here;
} catch (Exception $e) {
    handle any other errors here;
}