[英]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.