我有以下代码来确定是否应该根据登录信息创建新会话;
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
作为错误。
答案 0 :(得分:1)
如果\Proactivve\User\Sessions()
抛出异常,则try
块中的其他代码都不会被执行。不会将任何内容分配给$_session
,并且将完全跳过以下行。
范围界定不是你的问题,问题是永远不会创建变量。如果您需要catch
块中的特定值,则需要在不会被异常中断的上下文中创建它们。