PHP Try/Catch 块内的变量范围

PHP variable scope within Try/Catch block

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

例如:

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 在涉及范围界定时可能会变得有点愚蠢。我的问题是,理想情况下,应该如何工作?正确和正确的方法是什么?)

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

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

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

$o = new Pronk();

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

只要你的obj构造正确 您可以期望在 try/catch 块

之外使用 obj

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