从同一个类中的函数调用PHP类中的函数

问题描述:

我有一些代码在下面,由于我无法知道如何调用与另一个函数相同的类中的函数,因此无法运行。我已经尝试使用$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

不,我不会创建对象

这就是为什么调用$this->set_session($username);失败,如果你想跟着你已经制定了相同的码型,你可以这样做:

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

如果你使用的登录为类方法,那么你必须这样写:

SESSION::set_session($username); 

您必须将set_session函数定义为private。使用这种方式,您可以参考它这个 - > set_session

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