Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] autoload i $this - Fatal Error
AresMaster
post 29.01.2009, 21:16:08
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.01.2009

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


Witam!! Napisałem taką oto klasę (do połączeń z bazą danych za pomocą PDO):


  1. <?php
  2. class db extends PDO{
  3. public function __construct(){
  4.    global $sciezka,$phpEx;
  5.    require($sciezka.'config.'.$phpEx);
  6.       $this->db = new PDO($settings["type"].':host=' . $settings["server"] . ';dbname=' . $settings["name"], $settings["user"], $settings["pass"], array(PDO::ATTR_PERSISTENT => true))
  7.    or $debug->error($e->getMessage().'<br>'.$query,'SQL Error');;
  8.    $this->db->exec("SET CHARACTER SET latin2");
  9.    $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10.    $this->db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
  11.    $this->db->setAttribute(PDO::FETCH_ASSOC, true);
  12.    $this->prefix=$settings["prefix"];
  13.    unset($settings);      
  14. }
  15.  
  16.  
  17.    public function doquery($query, $table){
  18.    $sql = str_replace('{{table}}', $this->prefix.$table, $query);
  19.    $sqlquery = $this->db->query($sql);
  20.           return $sqlquery;
  21.    }
  22. public function dofetch($query, $table){
  23.        $sql = str_replace('{{table}}', $this->prefix.$table, $query);
  24.    $sqlquery = $this->db->query($sql)->fetch(PDO::FETCH_ASSOC);
  25.    return $sqlquery;
  26.    }
  27.  
  28.    public function doexec($query, $table){
  29.         $sql = str_replace('{{table}}', $this->prefix.$table, $query);
  30.    $sqlquery = $this->db->exec($sql);
  31.       return $sqlquery;
  32.    }
  33.  
  34.    public function doprepare($query, $table){
  35.          $sql = str_replace('{{table}}', $this->prefix.$table, $query);
  36.    $sqlquery = $this->db->prepare($sql);
  37.       return $sqlquery;    
  38.    }
  39.    public function __destruct()
  40.    {
  41.  $this->db=null;
  42.  $this->prefix=null;
  43.    }
  44. }
  45. ?>





Dopóki wywoływałem ja tak wszystko działało:


  1. <?php
  2. $db=new db();
  3. $query = $db->doquery("SELECT * FROM {{table}}",'test');
  4. ?>




Ale zrobiłem prosty autoload:


  1. <?php
  2. function __autoload($class)
  3. {
  4. global $sciezka,$phpEx;
  5. @require($sciezka . 'class/'.$class.'.class.'.$phpEx);
  6. }
  7. ?>




I po wywołaniu:


  1. <?php
  2. $query = db::doquery("SELECT * FROM {{table}}",'test');
  3. ?>




Pojawił się taki błąd




  1. <?php
  2. Fatal error: Using $this when not in object context in on line 20
  3. ?>

Nie wiem jak to naprawić sciana.gif

Proszę o pomoc exclamation.gif Dziękuje exclamation.gif
Powód edycji: Dodałem tag w tytule tematu. /webdice
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
dr_bonzo
post 29.01.2009, 21:39:57
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


$db->doquery a nie db::doquery - w statycznych wywolaniach nie mozesz $this uzywac


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
nospor
post 29.01.2009, 21:40:40
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no ale czemu wywolujesz metode jak statyczna podczas gdy wczesniej tworzyles obiekt? W tym wlasnie problem: wywolujesz metode statycznie a w jej srodku odwolujesz sie do $this, ktorego nie ma, bo nie stworzyles obiektu tylko wywowales metode statyczna


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
AresMaster
post 30.01.2009, 20:42:33
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.01.2009

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


Aha....
No to mam pytanie na co mam zamienić zmienną this abym mógł wywoływać metodę statycznie??
Go to the top of the page
+Quote Post
webdice
post 30.01.2009, 20:49:02
Post #5


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Umiesz czytać? ~dr_bonzo podał Ci rozwiązanie. Temat przenoszę do działu przedszkole.
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: 14.08.2025 - 03:17