2012-03-15 68 views
3

我有一些代碼在下面,由於我無法知道如何調用與另一個函數相同的類中的函數,因此無法運行。我已經嘗試使用$this,但它給了我一個PHP錯誤Using $this when not in object context...Line 25。我不知道如何解決這個問題,我希望別人能給我一些關於怎麼做的提示。我的代碼如下,謝謝:)從同一個類中的函數調用PHP類中的函數

class SESSION { 
    function start() { 
     session_start(); 
    } 
    function check() { 
     if ($_SESSION["username"]) { 
      return $_SESSION["username"]; 
     } else { 
      return "nli"; //Not logged in :(
     } 
    } 
    function set_session($username) { 
     $_SESSION["username"] = $username; 
    } 
    function login($username, $password) { 
     $database = DB::connect(); 
     $passwordsha = sha1($password); 
     $query = ""; 
     $res = $database->query($query); 
     $num = $res->num_rows; 
     if ($num == 0) { 
      header("Location: login.php?e=1"); 
     } elseif ($num == 1) { 
      $this->set_session($username); 
      header("Location: admin.php"); 
     } else { 
      header("Location: login.php?e=2"); 
     } 
    } 
} 
+0

您是否試圖靜態地運行呢?或者你是否真的在創建一個對象並對其進行操作? Session :: login($ a,$ b)vs $ pSession = new Session(); $ pSession-> login($ a,$ b); – 2012-03-15 00:29:29

+0

通過其他文件,我在這個文件上使用require()來做'Session :: login()',但是在這種情況下,我需要從'login()'調用'set_session()'。不,我沒有創建對象。 – 2012-03-15 00:31:28

+0

您運行的是哪個版本的PHP?雖然沒有範圍解析(默認爲public),但當您在類構造中創建函數時,它將成爲一種方法(仍然使用function關鍵字tho)。對'$ this-> set_session'的調用看起來應該起作用。調用代碼是什麼樣的? – 2012-03-15 00:32:23

回答

9

不,我不會創建對象

這就是爲什麼調用$this->set_session($username);失敗,如果你想跟着你已經制定了相同的碼型,你可以這樣做:

if ($num == 0) { 
    header("Location: login.php?e=1"); 
} elseif ($num == 1) { 
    self::set_session($username); 
    header("Location: admin.php"); 
} 
0

如果你使用的登錄爲類方法,那麼你必須這樣寫:

SESSION::set_session($username); 
0

您必須將set_session函數定義爲private。使用這種方式,您可以參考它這個 - > set_session

private function set_session($username) { 
    $_SESSION["username"] = $username; 
}