从同一个类中的函数调用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");
}
}
}
答
不,我不会创建对象
这就是为什么调用$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;
}
您是否试图静态地运行呢?或者你是否真的在创建一个对象并对其进行操作? Session :: login($ a,$ b)vs $ pSession = new Session(); $ pSession-> login($ a,$ b); – 2012-03-15 00:29:29
通过其他文件,我在这个文件上使用require()来做'Session :: login()',但是在这种情况下,我需要从'login()'调用'set_session()'。不,我没有创建对象。 – 2012-03-15 00:31:28
您运行的是哪个版本的PHP?虽然没有范围解析(默认为public),但当您在类构造中创建函数时,它将成为一种方法(仍然使用function关键字tho)。对'$ this-> set_session'的调用看起来应该起作用。调用代码是什么样的? – 2012-03-15 00:32:23