Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206

    Concatenamento tra "metodi" quando si istanza una classe

    Buongiorno forum!
    Volevo sottoporvi una quesito......

    si può fare una unione o concatenamento di metodi quando si istanza una classe??
    vi faccio un esempio:

    CREO LA CLASSE:


    Codice PHP:
    <?php
     
    class nomeClasse
     
    {
        private 
    $variabile1;
        private 
    $variabile2;
        private 
    $variabile3;

        public function 
    metodoUno($variabile1)
       {
            
    // ................
        
    }



       public function 
    metodoDue($variabile2)
       {
            
    // ................
       
    }


      public function 
    metodoTre($variabile3)
       {
            
    // ................
       
    }

     }
    ?>
    C'è modo per richiamare una classe e i vari metodi come scritto sotto??

    Codice PHP:
    <?php
      $es 
    =  new  nomeClasse();
      
    $es->metodoUno($variabile1)->metodoDue($variabile2)->metodoTre($variabile3);
    ?>

    Ho visto una del genere nel framework Zend quando crea le query..


    Saluti Filippo.

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    ma hai un motivo reale per farlo, o semplicemente ti sembra fico?

    ad ogni modo, per fare quel tipo di chiamata, ogni metodo tranne l'ultimo deve restituire un'istanza di un oggetto.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    Grazie per la risposta!!!
    il mio obbiettivo è creare una classe che mi costruisce una query SQL.
    Esempio:

    Codice PHP:
    $sql = new select();
    $sql->select('*')->from('tbl_esempio')->where('user=1')->orderby('id')->limit('0,5'); 
    $sql mi restituisce:
    SELECT * FROM tbl_esempio WHERE user=1 ORDER BY id LIMIT 0,5;

    hai un esempio da postarmi in merito a quello che hai scritto?

    Saluti Filippo.

  4. #4
    Originariamente inviato da felixaf21

    Codice PHP:
    $sql = new select();
    $sql->select('*')->from('tbl_esempio')->where('user=1')->orderby('id')->limit('0,5'); 
    $sql mi restituisce:
    SELECT * FROM tbl_esempio WHERE user=1 ORDER BY id LIMIT 0,5;
    Perdonami, ma che senso ha quello che vuoi fare al di là dello scopo didattico? L'OOP è un paradigma che va al di là del linguaggio utilizzato del quale bisogna apprendere la mentalità.
    Quello che vuoi fare non ha senso, scrivila a mano la query che è più chiaro e più logico che scritta così. Scrivi un metoto per l'aggiunta della clausola WHERE, un altro per l'ORDER BY...alla faccia della programmazione ad oggetti.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    non voglio realizzare questa classe al fine di produttività, ma solamente per approfondire le mie conoscenze......

    Saluti Filippo!!!

  6. #6
    Originariamente inviato da satifal
    Perdonami, ma che senso ha quello che vuoi fare al di là dello scopo didattico? L'OOP è un paradigma che va al di là del linguaggio utilizzato del quale bisogna apprendere la mentalità.
    Quello che vuoi fare non ha senso, scrivila a mano la query che è più chiaro e più logico che scritta così. Scrivi un metoto per l'aggiunta della clausola WHERE, un altro per l'ORDER BY...alla faccia della programmazione ad oggetti.
    Questo sistema di query building tramite metodi concatenati e' in realta' piuttosto diffuso, specialmente nelle classi database dei framework. Onestamente non vedo perche' dovrebbe cozzare con la programmazione OO, alla fine e' una serie di metodi che modificano il comportamento dell'oggetto, no?

    L'organizzazione logica dei query builder non e' male, sono comodi specialmente per le query dinamiche (cioe' quelle in cui devi aggiungere degli where in certe condizioni) e sono piu' abbordabili delle query scritte a mano.

    Poi io non mi trovo tanto perche' la sintassi diventa tremendamente prolissa e preferisco scrivere le query direttamente, pero' e' sicuramente un approccio che ha i suoi pregi.

  7. #7
    Originariamente inviato da k.b
    Questo sistema di query building tramite metodi concatenati e' in realta' piuttosto diffuso, specialmente nelle classi database dei framework. Onestamente non vedo perche' dovrebbe cozzare con la programmazione OO, alla fine e' una serie di metodi che modificano il comportamento dell'oggetto, no?

    L'organizzazione logica dei query builder non e' male, sono comodi specialmente per le query dinamiche (cioe' quelle in cui devi aggiungere degli where in certe condizioni) e sono piu' abbordabili delle query scritte a mano.

    Poi io non mi trovo tanto perche' la sintassi diventa tremendamente prolissa e preferisco scrivere le query direttamente, pero' e' sicuramente un approccio che ha i suoi pregi.
    Io la vedo in maniera un po' differente. Sono d'accordo con la scrittura si metodi atti alla costruzione delle query, ma dovrebbero essere metodi privati della classe adibita a tale scopo. Un conto è invocare un metodo passando dei parametri in base alla quale tale metodo internamente effettua le dovute chiamate di composizione e restituisce la query finale, un conto è dover scrivere manualmente quella sbrodolata di invocazioni che di OOP secondo me non hanno nulla se non quello di essere metodi pubblici di una classe.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Originariamente inviato da satifal
    Io la vedo in maniera un po' differente. Sono d'accordo con la scrittura si metodi atti alla costruzione delle query, ma dovrebbero essere metodi privati della classe adibita a tale scopo. Un conto è invocare un metodo passando dei parametri in base alla quale tale metodo internamente effettua le dovute chiamate di composizione e restituisce la query finale, un conto è dover scrivere manualmente quella sbrodolata di invocazioni che di OOP secondo me non hanno nulla se non quello di essere metodi pubblici di una classe.
    Non capisco cosa intendi.

    Il discorso di quell'approccio e' questo: all'inizio ho un oggetto che rappresenta una query. Questo oggetto avra' un tipo (select, insert, update), avra' degli attributi necessari (la tabella da interrogare, i campi da estrarre/inserire/modificare), degli attributi opzionali (condizioni where, limiti, ecc.). Sinceramente non vedo perche' questa idea non si possa rappresentare bene con dei setter pubblici che modificano l'oggetto prima di arrivare al metodo finale che e' l'esecuzione della query in base ai parametri settati.

    Non sto dicendo che sia l'approccio migliore perche' alla fine e' soggettivo e dipende dai casi, pero' non capisco perche' secondo te questo dovrebbe cozzare con la OOP.

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    @satifal: questo tipo di approccio come lo definiresti??
    http://framework.zend.com/manual/en/zend.db.select.html

    Comunque ritornando al discorso che ho scritto nel primo post, mi date una mano gentilmente...

  10. #10
    Originariamente inviato da felixaf21
    @satifal: questo tipo di approccio come lo definiresti??
    http://framework.zend.com/manual/en/zend.db.select.html

    Comunque ritornando al discorso che ho scritto nel primo post, mi date una mano gentilmente...
    Hm ti aveva risposto bubi1, aggiungi "return $this;" alla fine dei metodi che vuoi concatenabili.

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.