Try / Catch块

时间:2015-09-09 20:10:07

标签: php exception-handling scope try-catch

在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();

这有效吗?或者应该在try / catch之前设置$o = NULL;以保持$o的范围?

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

2 个答案:

答案 0 :(得分:11)

您的代码有效。 PHP中的变量范围是按功能而不是阻止。因此,您可以在try块内分配一个变量,并在外部访问它,只要它们在同一个函数中。

答案 1 :(得分:2)

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