gpt4 book ai didi

php - 简单的 try/finally 与 try/catch

转载 作者:可可西里 更新时间:2023-10-31 23:00:50 25 4
gpt4 key购买 nike

具有简单的功能,例如:

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 block 的经验很少,而且我不知道所有陷阱。

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

最佳答案

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

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

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

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

关于php - 简单的 try/finally 与 try/catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52484104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com