在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在范围界定方面会有点愚蠢。我的问题是,理想情况下,应该如何它有效吗?这是正确和正确的方法是什么?)
答案 0 :(得分:11)
您的代码有效。 PHP中的变量范围是按功能而不是阻止。因此,您可以在try
块内分配一个变量,并在外部访问它,只要它们在同一个函数中。
答案 1 :(得分:2)
我认为这主要是基于意见。代码是正确的,只要catch
块始终具有return
语句,它就会按预期工作。如果catch
块没有返回,则流程将继续,并且try / catch块之外的代码将被执行,并且它将失败,因为$o
不会被初始化。您将能够访问$o
,因为php中没有块范围,但由于对象构造失败,该方法不会存在。