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
。
在 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
。