2011-02-14 78 views
0

如果這種功能是:重構頭定位功能

check_login_session() 
{ 
    if (!isset[$_SESSION['user_auth'])) 
    { 
     header('Location: login.php'); 
    } 
    else 
    { 
     # check against database here? 
     return $_SESSION['user_auth']; 
    } 
} 

或者,應該在標題中送出去的函數被調用後:

check_login_session() 
{ 
    if (!isset[$_SESSION['user_auth'])) 
    { 
     return false; 
    } 
    else 
    { 
     # check against database here? 
     return $_SESSION['user_auth']; 
    } 
} 

所以,當它被稱爲:

if (check_login_session === false) 
{ 
    header('Location: login.php'); 
} 

我知道代碼基本上是一樣的東西,但大部分是'正確的方式'來重構這個?

+0

你應該使用完整的URL,而不僅僅是一個文件名。 – 2011-02-14 02:11:30

回答

1

我會用第二種方法。一般來說,函數應該是一個黑盒子......你提供參數並且它們返回一個值或者通過引用修改某些東西,或者如果它們是一個對象的方法,他們可能會修改該對象的狀態或另一個對象的狀態。如果您需要根據返回值或修改的對象/參數採取行動,那麼應該在主控邏輯中完成。顯然有例外,但這對我來說是一條通用規則。

如果是這種情況,你需要發送額外的特定標題,所以你想封裝在一個函數中,那就沒問題,但我會說,從邏輯檢查,如果它是一個驗證的會話。

1

第二種方法似乎更加正確和靈活。

如果$ _SESSION ['user_auth']返回false,您將不得不檢查響應。

將函數重命名爲更類似於is_logged_in的函數可能更易讀,並且可以理解該函數執行/返回的內容。