繁体   English   中英

Try/Catch 块中的 PHP 变量范围

[英]PHP variable scope within Try/Catch block

在 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; 在 try/catch 之前设置以保持$o在范围内?

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

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

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

异常处理的主要概念是,如果“try”块内部出现任何问题,代码将进入“catch”块。 因此,如果

$o = new Pronk();

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

只要您的 obj 构造正确,您就可以期望在 try/catch 块之外使用obj

但是,假设在构建过程中出现异常。 那么你的obj甚至不会在 try 块内构建。 因此,您将无法调用obj上的函数,因为obj甚至没有被创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM