Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kłopot z skryptem (błąd początkującego)
Forum PHP.pl > Forum > PHP
kszymon0
Witam,

Męczę się od rana z błędem: Fatal error: Using $this when not in object context in C:\Users\tkuchnia\Desktop\Projekty PHP\CMS\kernel\class\class.session.php on line 13

kod pliku class.session.php:
  1. <?php
  2.  
  3. class Session {
  4.  
  5. public $id;
  6. public $user;
  7. public $pass;
  8. public $session_is;
  9. public $time;
  10.  
  11. public function startSession() {
  12.  
  13. if ($this->session_is == 0 ) {
  14.  
  15. $this->time = time();
  16. }
  17. $this->session_is = 1;
  18. $this->getTimeDestroy();
  19.  
  20. echo time() .'<br><br>' . $this->time;
  21. }
  22.  
  23. public function getTimeDestroy() {
  24. if(time() < ($this->time + 600)) {
  25. $this->session_is = 0;
  26. }
  27. }
  28.  
  29. public function setUserData($id, $user, $pass) {
  30. $_SESSION['id'] = $id;
  31. $_SESSION['user'] = $user;
  32. $_SESSION['pass'] = $pass;
  33. }
  34.  
  35. public function closeSession() {
  36. $this->session_is = 0;
  37. }
  38.  
  39. public function getSession_is() {
  40.  
  41.  
  42. }
  43.  
  44.  
  45. }
  46.  
  47.  
  48. ?>

Jak pozbyć się tego błędu?
wookieb
A pokaż jak wywołujesz tą klasę.
Zapewne tak
  1. Session::startSession();

A wtedy zaprasza do manuala http://pl2.php.net/manual/pl/language.oop5.static.php
kszymon0
plik index.php

  1. <?php
  2.  
  3. $page = isset($_POST['p']) ? $_POST['p']: 0;
  4.  
  5. require_once('../kernel/class/class.Login.php');
  6. require_once('../kernel/class/class.session.php');
  7. require_once('../data/config.php');
  8.  
  9. if (Session::getSession_is() == null or Session::getSession_is() == 0){
  10. $user = isset($_POST['user']) ? $_POST['user']: null;
  11. $pass = isset($_POST['pass']) ? $_POST['pass']: null;
  12. } else {
  13. $user = null;
  14. $pass = null;
  15. }
  16. Session::startSession();
  17. ?>
  18.  
  19. <html>
  20. <head>
  21. <title>Admin biggrin.gif</title>
  22. </head>
  23. <body bgcolor='#ffffff'>
  24. <table width='1024px' height='650px' bgcolor='#000000' align='center'>
  25. <tr>
  26. <td width=100% height=100%>
  27. <?php Login::getLogin($user, $pass); ?>
  28. </td>
  29. </tr>
  30. </table>
  31. </body>
  32. </html>

darko
Dokładnie, utwórz instancję klasy i pracuj na niej, statycznie nie odwołasz się wskaźnikiem $this, czyli $s = new Session(); $s->startSession(); Metoda getSession_is() również nie jest statyczna.
cim
Witam,

jeżeli odwołujesz się do $this to musisz to robić w oparciu o instancje tej klasy i wtedy nazwa metody poprzedzona '->' ($instancjaKlasy->metoda(); ). A jeżeli wywołujesz metodę statycznie (klasa::metoda(); ) to w jej treści zamiast '$this' stosujesz 'self::zmienna'. No i metodę deklarujesz jako statyczną, bo teraz masz zwykłą metodę z deklaracji i treści a odwołujesz się jak do statycznej.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.