Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Using $this when not in object context
Forum PHP.pl > Forum > Przedszkole
Turson
Z poniższego kodu otrzymuję błąd Fatal error: Using $this when not in object context in .. on line (przygotowanie zapytania do bazy)

Klasa
  1. <?PHP
  2. class User extends Connect{
  3. static function isActivate($user_id){
  4. $stmt=$this->db->prepare("SELECT activ_key FROM keys WHERE user_id=:user_id");
  5. $stmt->bindValue(':user_id', $user_id, PDO::PARAM_INT);
  6. $stmt->execute();
  7. if($stmt->rowCount()==0){
  8. return true;
  9. }
  10. }
  11. }
  12. ?>


Odwołanie do klasy
  1. if(User::isActivate($_SESSION["user_id"]))


Klasa połączenia z bazą
  1. <?PHP
  2. class Connect{
  3. public function __construct() {
  4. $this->db = new PDO('mysql:host=localhost;dbname=x', 'x', 'x', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")) or die();
  5. }
  6. }
  7. ?>


Popszperałem w sieci i znalazłem odpowiedź, że w metodach static zamiast $this używamy self::
więc zmodyfikowałem na
  1. $stmt=self:snitch.gifdb->prepare("SELECT activ_key FROM keys WHERE user_id=:user_id");

i wtedy błąd
Cytat
Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR)
com
a gdzie masz require('connect.php'); w user.php ? btw ?> w plikach z samym php sie nie daje wink.gif

http://stackoverflow.com/questions/7298359...-and-properties wink.gif

http://www.php.net/manual/en/language.oop5.static.php#96402
Sephirus
  1. // spójrz sam na ten kawałek kodu:
  2.  
  3. static function isActivate($user_id){
  4. $stmt=$this->db->prepare("SELECT activ_key FROM keys WHERE user_id=:user_id");


W statycznej metodzie odwołujesz się dynamicznie do $db.

W ogóle musisz to jakoś inaczej zaprojektować bo w klasie User nie ma w ogóle użycia konstruktora... proponuje to wszystko przemyśleć.
Turson
Cytat(com @ 13.11.2013, 01:46:51 ) *
a gdzie masz require('connect.php'); w user.php[/url]

Require jest.


Cytat(Sephirus @ 13.11.2013, 08:37:29 ) *
  1. // spójrz sam na ten kawałek kodu:
  2.  
  3. static function isActivate($user_id){
  4. $stmt=$this->db->prepare("SELECT activ_key FROM keys WHERE user_id=:user_id");


W statycznej metodzie odwołujesz się dynamicznie do $db.

W ogóle musisz to jakoś inaczej zaprojektować bo w klasie User nie ma w ogóle użycia konstruktora... proponuje to wszystko przemyśleć.

W klasie User mam zrobić kontruktora do połączenia z bazą?
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.