简单 try/finally 与 try/catch

Simple try/finally vs. try/catch

用简单的函数如:

function hello( $var )
{
    try
    {
        // do something with $var which may or may not throw an exception
        return $var;
    }
    finally
    {
        return $var;
    }
}

如果转换为:

,在逻辑或处理上是否有任何差异?
function hello( $var )
{
    try
    {
        // do something with $var which may or may not throw an exception
        return $var;
    }
    catch( Exception $e )
    {
        return $var;
    }
}

请忽略$e没有做任何事情,请忽略示例函数的simplicity/uselessness;这只是一个 MCVE.

此转换的目的是使源代码在 PHP 5.3 中 100% 兼容,因为 finally{} 是在 5.5 中引入的,我希望在保持 100% 的同时进行必要的最小更改逻辑。

我之所以问,是因为我个人使用 try/catch/finally 块的经验很少,而且我不知道所有陷阱。

是否有更好的方法来实现PHP 5.3 兼容性?

如果您在 finally 语句中放置 return,那么在 try 完成后它将始终为 运行。您的第一个示例(可能被删减)将使用来自 finally 子句的结果 return,而不是 try 子句。

您的第二个示例有点不同,因为您不清楚如何定义 $var。如果您有 $var = $this->throwsException('x'); 并且该行是抛出异常的地方,那么 $var 将在您的 catch 子句中未定义。如果 $var 已经定义,那么 catch 子句将是你 return 来自的地方,假设 try 子句抛出异常。

如果您需要 finally 子句的 PHP 5.3 安全版本,我会这样做:

$var = false;
try {
    $var = $this->doSomething();
} catch (Exception $ex) {
    $var = $ex->getMessage();
}
return $var;