try-catch 块 php 中的变量范围


Variable Scope in try-catch block php

我有以下代码来确定是否应根据登录信息创建新会话;

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块中的特定值,则需要在无法被异常中断的上下文中创建它们。