Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Francis87
    Registrato dal
    Jun 2003
    Messaggi
    5,970

    OOP - 2 domande sulle funzioni

    ciao a tutti

    1. ho qualke problema nell'utilizzo di una classe per la connessione al DB e le query. (ho preso qualke spunto dagli esempi di Advanced PHP Programming)

    Codice PHP:
    class dbhandler {
     var 
    $user$pass$dbhost$dbname$dbh;
     function 
    dbhandler() {
      
    $this->user=$cfg_db_user;
      
    $this->pass=$cfg_db_pass;
      
    $this->dbhost=$cfg_db_host;
      
    $this->dbname=$cfg_db_name;
     }
     function 
    connect() {
      
    $this->dbh=mysql_pconnect($this->dbhost,$this->user,$this->pass);
      ...
     }
     function 
    execute($query) {
      if (!
    $this->dbh) {
       
    $this->connect();
      }
      
    $ret=mysql_query($query,$this->dbh);
      ...
     }

    ottengo un errore durante il parsing del file in corrispondenza di $this->connect() nella funzione execute.
    Precisamente l'errore è 'Call to undefined function: connect()'.

    come devo richiamare la funzione?


    2. quella stessa funzione, in caso di un SELECT mi crea un'istanza di un altro oggetto:
    codice:
    $result=new DB_res($this->dbh,$query);
    $result->data=$ret;
    return $result;
    il quale mi permette di richiamare altre funzioni come num_rows() o fetch_row() - ritornano rispettivamente mysql_num_rows() e mysql_fetch_row().

    Purtroppo, un esempio pratico mi torna un Fatal Error: Call to a member function on a non-object.
    codice:
    $query=dbhandler::execute($raw);
    if ($query->num_rows()!=0) {
    ...
    Come mai non mi permette di usare il risultato della query come l'oggetto che viene istanziato nella classe?

    se servisse uso PHP 4.3.4

    grazie
    Heaven's closed. Hell sold out.

    Linux 2.6.26-2-amd64
    Debian squeeze

  2. #2
    la riga:

    $query=dbhandler::execute($raw);

    esegue una chiamata statica ad una funzione della classe, non ad una funzione di un oggetto. Nella funzione "execute" viene usato l'oggetto $this che però non è stato istanziato (poiché stai usando la classe, non un oggetto), quindi non esiste.

    dovresti prima istanziare un oggetto dalla classe:

    $mio_db = new dbhandler();

    poi lanciare la funzione execute, stavolta come metodo dell'oggetto $mio_db:

    $query = $mio_db->execute($raw);


  3. #3
    Utente di HTML.it L'avatar di Francis87
    Registrato dal
    Jun 2003
    Messaggi
    5,970
    oh, grazie!

    e per il primo problema?
    b
    Heaven's closed. Hell sold out.

    Linux 2.6.26-2-amd64
    Debian squeeze

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.