我有以下代码来确定是否应根据登录信息创建新会话;
try {
$_session = new 'Proactivve'User'Sessions($_user);
$start_session = $_session->startSession();
}
catch ('Proactivve'Exceptions'ProactivveAuthenticationException $e) {
if($start_session === true) {
// Successful login
return array(/* ... */);
}
return array(/* ... */);
}
其中我需要从 try 块检查 $start_session
的返回值;但是,我从 PHP (v5.6.11) 收到该变量的"Undefined variable"
错误。我一直认为PHP中的变量作用域是文件,方法或函数,而不是块。为什么当变量应该可访问时收到此错误?
我在AuthenticationException
异常捕获器中检查成功登录的原因是,在创建 'Proactivve'User'Sessions
类的新实例时,我检查现有会话并在找不到时抛出身份验证异常,因此我需要检查此 catch 块的内部以确定用户尚未登录。
更新:
try {
$_session = new 'Proactivve'User'Sessions($_user);
}
catch ('Proactivve'Exceptions'ProactivveAuthenticationException $e) {
if($_session->startSession() === true) {
// Successful login
return array(/* ... */);
}
return array(/* ... */);
}
这个新方法理解在抛出异常后,PHP 停止执行 try 块中的代码并在 catch 块中启动会话;但是,现在我收到Undefined variable: _session
作为错误。
如果'Proactivve'User'Sessions()
引发异常,则不会执行try
块中的其他任何代码。不会为$_session
分配任何内容,并且将完全跳过以下行。
范围不是你的问题,问题是变量永远不会被创建。如果需要catch
块中的特定值,则需要在无法被异常中断的上下文中创建它们。