Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [oop php5] errore di chiamata in un non-oggetto passando il risultato di un metodo

    Ho già fatto delle ricerche sul forum e ho trovato un solo risultato utile, ma veramente troppo complicato rispetto alle mie conoscenze e a quello che mi serve, perciò chiedo venia...

    Allora, la classe incriminata è questa (posto solo la parte utile alla risoluzione del problema):
    codice:
    class  database{
       var $db;
    
    # costruttore: chiede solo il nome del db e la connessione
    function database($dbname,$dbconn){
       $this->db['name'] = $dbname;
       $this->db['conn'] = $dbconn;
      }
    
    function db_query($query){
      $this->db['query'] = mysql_query($query,$this->db['conn']);
      return $this->db['query'];
      }
    }
    mentre questa la parte interessata del file che chiama la classe:
    codice:
    $dbop = new database($db_name,$db);
    
    $result = $dbop->db_query("QUERY_AL_DB");
    Quando vado a far girare il tutto, ricevo questo errore:

    Fatal error: Call to a member function db_query() on a non-object

    che è riferito al secondo pezzo del secondo file che ho listato sopra.
    Ora provo a spiegare cosa vorrei che facesse, e invece vorrei sapere perché non lo fa e come farglielo fare :P
    La classe mi sembra semplice: prende in input la query MySQL inserita nel file, la passa nell'apposita funzione per il DBMS, e restituisce il risultato della query. Nella mia mente, in $result dovrebbe finirci l'output di mysql_query($query,$this->db['conn']) cosa che evidentemente non accade.
    Amministratore mozillaitalia.org

    Le truppe sono state spiegate, ma chi sa perché io continuo a non capirle.

  2. #2
    up

    (ah: il problema si presenta anche con php4)
    Amministratore mozillaitalia.org

    Le truppe sono state spiegate, ma chi sa perché io continuo a non capirle.

  3. #3

    ...........

    mysql_select_db dov'è ?

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    scusa, ma questo errore non ha nulla a che fare con mysql:

    codice:
    Fatal error: Call to a member function db_query() on a non-object
    significa che stai cercando di chiamare un metodo da una variabile che non è un oggetto.

    Morale:

    1. O non hai istanziato la classe prima di chiamare il metodo
    2. L'hai istanziata ma poi hai sovrascritto il contenuto della var (e cosi non è + un oggetto da cui chiamare il metodo).

    ciao

  5. #5
    L'appunto era che avendo provato
    il codice non dava errori e mysql_select_db
    non c'era.
    La classe (a parte che passare la connessione
    come proprietà
    non è un buon metodo o per lo meno è vecchio
    molto + semplice passare i parametri e basta
    e return $this->db['query']; che non è proprio OOP)
    va bene (lo snippet)
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6
    Morale: 1. O non hai istanziato la classe prima di chiamare il metodo 2. L'hai istanziata ma poi hai sovrascritto il contenuto della var (e cosi non è + un oggetto da cui chiamare il metodo).
    In parole povere vuol dire che l'errore è da un'altra parte

    ri
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  7. #7
    Allora, vedrò di essere più chiaro:

    la connessione al database non viene fatta detro la classe, però c'è ed è anteriore a tutto quello che ho impostato prima, quindi quando entra in funzione la classe la connessione al db c'è, e anche la selezione del db. Tanto per far capire, ieri ho provato ad eliminare la classe e lasciare solo un elenco di funzioni, e usandole le stesse funzioni funzionano (scusate il gioco di parole), quindi vuol dire che il database è stato selezionato correttamente. Tuttavia preferivo fare una classe perché mi sembrava più pulito.
    A parte la scrittura della classe, nell'applicazione tutto ciò che riguarda la classe è scritto nell'ordine che ho scritto prima: creo un oggetto della classe database e poi lo uso come ho scritto nella riga successiva, chiamando il metodo db_query.
    L'unico elemento che potrebbe essere di disturbo (ma non dovrebbe perché le variabili all'interno della classe sono locali, giusto?) è che uso due volte la variabile $db: nello script per prendere l'output di mysql_connect (non mi ricordo il nome preciso ora ma mi pare sia questo :P) mentre dentro la classe come variabile globale per la classe.
    Per il resto, sono sicuro di non aver usato $dbop per altre cose.

    Comunque prima ho postato il minimo indispensabile utile di codice, tanto per non postare montagne di linee che non ci incastrano; però se preferite vi posto tutto il codice della pagina.
    Amministratore mozillaitalia.org

    Le truppe sono state spiegate, ma chi sa perché io continuo a non capirle.

  8. #8
    up
    Amministratore mozillaitalia.org

    Le truppe sono state spiegate, ma chi sa perché io continuo a non capirle.

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.