[英]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.