Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Using $this when not in object context
Turson
post 12.11.2013, 18:45:35
Post #1





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
com
post 13.11.2013, 01:46:51
Post #2





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Sephirus
post 13.11.2013, 08:37:29
Post #3





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Turson
post 13.11.2013, 17:29:06
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


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ą?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.07.2025 - 18:02