2015-09-09 60 views
5

在PHP中,变量范围规则如何应用于Try/Catch块?块完成后,在try块中声明的变量是否超出范围?或者它们是否在范围内,直到函数/方法结束?Try/Catch块内的PHP变量范围

例如:

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

PHP没有块范围。变量范围是整个功能。 – Barmar

回答

6

您的代码有效。 PHP中的变量作用域是按功能而不是阻止的。因此,您可以在try区块内指定一个变量,并在外部访问它,只要它们处于相同的功能。

2

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

0

异常处理的主要概念是,如果“try”块内出现任何错误,代码将进入“catch”块。所以如果

$o = new Pronk(); 

不会引发任何错误,它将在范围内。我们不必在try/catch块之前声明它。 你的代码是完全有效的。