具有简单的功能,例如:
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
不做任何事情的事实,并忽略示例函数的简单性/无用性;这只是一个MCVE。
此转换的目的是使源代码在PHP 5.3中100%兼容,因为finally{}
是在5.5中引入的,我希望在保持100%的逻辑的同时进行必要的最小更改。
我之所以只问是因为我个人对使用try / catch / finally块的经验很少,而且我并不了解所有陷阱。
是否有更好的方法来实现PHP 5.3兼容性?
答案 0 :(得分:4)
如果将return
放在finally语句中,则它将始终在尝试完成后运行。您的第一个示例(可能已减少)将使用finally子句而非try子句返回的结果。
您的第二个示例有些不同,因为尚不清楚如何定义$var
。如果您有$var = $this->throwsException('x');
并且该行是引发异常的地方,那么$var
将在catch子句中未定义。如果已经定义了$var
,则假定try子句引发异常,那么catch子句将是您从那里返回的地方。
如果您需要一个finally子句的PHP 5.3安全版本,我会这样做:
$var = false;
try {
$var = $this->doSomething();
} catch (Exception $ex) {
$var = $ex->getMessage();
}
return $var;