簡體   English   中英

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""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分配任何$_session ,並且將完全跳過以下行。

范圍不是你的問題,問題是變量永遠不會被創建。 如果您需要catch塊中的特定值,則需要在它們不能被異常中斷的上下文中創建它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM