2012-03-15 7 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); –

+0

Через другие файлы я использовал require() в этом файле для 'Session :: login()', но в этом случае мне нужно вызвать 'set_session()' из 'login()'. И нет, я не создаю объект. –

+0

Какую версию PHP вы используете? Несмотря на отсутствие разрешения области (по умолчанию для общественности), когда вы создаете функцию внутри конструкции класса, она становится методом (по-прежнему использует ключевое слово функции tho). Вызов '$ this-> set_session' выглядит так, как будто он должен работать. Как выглядит код вызова? –

ответ

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. Таким образом, вы можете ссылаться на него, используя this-> set_session

private function set_session($username) { 
    $_SESSION["username"] = $username; 
} 
Смежные вопросы