Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] autoload i $this - Fatal Error
Forum PHP.pl > Forum > Przedszkole
AresMaster
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
dr_bonzo
$db->doquery a nie db::doquery - w statycznych wywolaniach nie mozesz $this uzywac
nospor
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
AresMaster
Aha....
No to mam pytanie na co mam zamienić zmienną this abym mógł wywoływać metodę statycznie??
webdice
Umiesz czytać? ~dr_bonzo podał Ci rozwiązanie. Temat przenoszę do działu przedszkole.
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.