Aufruf einer Funktion in einer PHP-Klasse von einer Funktion innerhalb der gleichen Klasse
Ich habe einige code unten, die werden nicht laufen, da ich nicht in der Lage zu wissen, wie Sie eine Funktion aufrufen, die in der gleichen Klasse wie eine andere Funktion. Ich habe bereits versucht mit $this
aber es gibt mir ein PHP-Fehler Using $this when not in object context...Line 25
. Ich habe keine Ahnung, wie man dieses Problem beheben und ich hoffe jemand anderes kann mir ein paar Tipps geben auf was zu tun ist. Mein code ist unten, danke 🙂
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");
}
}
}
Versuchen Sie, führen Sie diese statisch? Oder sind Sie tatsächlich Sie ein Objekt erstellen und zu manipulieren? Session::login($a, $b) vs. $pSession = new Session(); $pSession->login($a, $b);
Über andere Dateien, die ich verwendet haben, require() auf diese Datei zu tun
Welche PHP-version verwendest du? Obwohl es keine scope-Auflösung (Standard: public), wenn Sie eine Funktion innerhalb einer Klasse zu konstruieren, wird eine Methode (arbeitet noch immer mit dem Schlüsselwort function tho). Der Aufruf
Wenn Sie nicht erstellen Sie ein Objekt, sind Sie nicht erstellen. Die einfachste Sache zu tun ist, um die Funktion zu verwenden, die statisch: "self::set_session($username)" -- dies ist JEDOCH eine schlechte form. Markieren Sie Ihre Funktionen als static, wenn Sie statisch ist, oder verwenden Sie Sie als Objekt-Methoden, niemals beide.
Es gibt viele Gründe, um eine benutzerdefinierte session-handling Klasse, aber Sie sind nicht mit irgendwelchen von Ihnen hier. Aber die krassesten Fehler des Codes ist, dass es mit der PHP 4-syntax, wenn es sollte mit PHP 5 syntax, die das public/private/static Definitionen klar und es wäre viel klarer, was Sie beabsichtigte, mit Ihrem code.
Über andere Dateien, die ich verwendet haben, require() auf diese Datei zu tun
Session::login()
aber in diesem Fall muss ich anrufen set_session()
aus login()
. Und Nein, ich bin nicht der Erzeugung des Objektes.Welche PHP-version verwendest du? Obwohl es keine scope-Auflösung (Standard: public), wenn Sie eine Funktion innerhalb einer Klasse zu konstruieren, wird eine Methode (arbeitet noch immer mit dem Schlüsselwort function tho). Der Aufruf
$this->set_session
sieht aus wie es funktionieren sollte. Was hat der aufrufende code Aussehen?Wenn Sie nicht erstellen Sie ein Objekt, sind Sie nicht erstellen. Die einfachste Sache zu tun ist, um die Funktion zu verwenden, die statisch: "self::set_session($username)" -- dies ist JEDOCH eine schlechte form. Markieren Sie Ihre Funktionen als static, wenn Sie statisch ist, oder verwenden Sie Sie als Objekt-Methoden, niemals beide.
Es gibt viele Gründe, um eine benutzerdefinierte session-handling Klasse, aber Sie sind nicht mit irgendwelchen von Ihnen hier. Aber die krassesten Fehler des Codes ist, dass es mit der PHP 4-syntax, wenn es sollte mit PHP 5 syntax, die das public/private/static Definitionen klar und es wäre viel klarer, was Sie beabsichtigte, mit Ihrem code.
InformationsquelleAutor Joshua Ferrara | 2012-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist der Grund, warum der Aufruf
$this->set_session($username);
wird scheitern, wenn Sie möchten, Folgen Sie den gleichen code-Muster, das Sie haben, können Sie dies tun:InformationsquelleAutor Mike Purcell
Wenn Sie melden Sie sich als Methode der Klasse, dann müssen Sie schreiben, wie diese:
InformationsquelleAutor PasteBT
Müssen Sie definieren, set_session Funktion als private. So können Sie auf es mit this->set_session
InformationsquelleAutor Xabier Aberasturi