Try/Catch 块中的 PHP 变量作用域

2022-08-30 15:40:32

在 PHP 中,变量作用域规则如何应用于 Try/Catch 块?块中声明的变量在块完成时是否会超出范围?还是在函数/方法结束之前,它们都在范围内?try

例如:

try
{
   // This may throw an exception when created!
   $o = new Pronk();
}
catch (Exception $ex)
{
   // Handle & exit somehow; not important here
   return false;
}

$o->doPronk();

这有效吗?或者应该在尝试/捕获之前设置以保持在范围内?$o = NULL;$o

(我知道示例代码确实有效,但是我也知道PHP在范围界定方面会变得有点愚蠢。我的问题是,理想情况下,它应该如何工作?什么是正确和正确的方法来做到这一点?


答案 1

您的代码有效。PHP 中的变量作用域是按函数,而不是块。因此,您可以在块内分配一个变量,并在外部访问它,只要它们位于同一函数中即可。try


答案 2

我相信这主要是基于意见的。代码是正确的,只要块始终具有该语句,它就会按预期工作。如果块未返回,则流将继续,并且将执行 try/catch 块外部的代码,并且它将失败,因为不会初始化。由于php中缺少块范围,您将能够访问,但是由于对象构造失败,该方法将不存在。catchreturncatch$o$o


推荐