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 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

Schreibe einen Kommentar