Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18

Discussione: PHP OOP StdMethod

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    X l'editor ti suggerisco di fare così :
    "Menu Impostazioni"
    "Le mie impostazioni" -- > Modifica Impostazioni

    Gruppo "Opzioni varie", selezioni "Editor di base - Controlli di formattazione extra"

    Ho, capito perfettamente come procedere, per strutturare un active record base, più o meno come me lo ero immaginato....
    Grazie mille.
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    grazie per la dritta
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    mi permetto di suggerirti un approccio leggermente diverso da quello di Santino83_02, la logica è la stessa ma gestita in modo diverso

    Codice PHP:
    // le funzioni comuni del modello o entità 
    abstract class model  {

      protected 
    $fields = array();

      public function 
    __construct( array $data ) {
        foreach ( 
    $data AS $name=>$value ) {
          
    $this->$name $value;
        }
      }

      
    // setter e getter come sempre non riscrivo il codice
      
    public function __set() {
      }
      public function 
    __get() {
      }
    }

    // questa è la rappresentazione della tabella mysql person "entità"
    class personModel extends model {
      protected 
    $fields = ( 'id''nome''cognome' );

    i dati li recuperi con un mapper

    Codice PHP:
    // le funzioni comuni del mapper
    abstract class mapper {

        protected 
    $pdo;
        protected 
    $table;

        abstract protected function 
    model( array $data );

        public function 
    __constructmyPDO $pdo ) {
            
    $this->pdo $pdo;
        }
    }

    // il mapper
    class personMapper {

      protected 
    $table 'persons';

      public function 
    model( array $data ) {
        return new 
    personModel$data );
      }

        public function 
    fetch$id ) {
            
    $selectQuery = <<<QUERY
    SELECT
     *
    FROM
     
    $this->table
    WHERE
     id = :id
    LIMIT
     0,1
    QUERY;
            
    $data $this->pdo->executeQuery$selectQuery, array( 'id'=>$id ) )->fetch();
            if ( empty( 
    $data ) ) {
                return 
    NULL;
            }
        
            
    //qui la magia :)
            
    return $this->model$data );
        }

        public function 
    fetchAll() {
            
    $selectQuery 'SELECT * FROM $this->table';

            
    $sql $this->pdo->executeQuery$selectQuery );

            
    $rows = array();
            while ( 
    $row $sql->fetch() ) {

                
    // ancora la magia :)
                
    $rows[] = $this->model$row );
            }
            return 
    $rows;
        }

    Ultima modifica di Al_katraz984; 12-11-2013 a 19:24
    Questa volta, più che un voto.. è favoreggiamento.

  4. #4
    vabbeh la mia non era intesa come una cosa esaustiva. Anzi, ritengo che farsele a mano visto il livello di conoscenze espresso non sia proprio il caso, neanche per pratica ( la pratica và abbinata alla teoria, teoria che non è la pagina di un blog o di un sito divulgativo come html.it ), punterei invece ad un uso oculato e curioso di un entity framework all'altezza del nome ( Doctrine ad esempio)
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    -error-
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Ciao Al_katraz984,

    Ho guardato a fondo la soluzione proposta da te.
    Da quanto posso capire, con la tua soluzione vado a beneficiare di una astrazione uguale per tutte le mie entità (Es. Vedi model).
    La mia classe personModel non è nient'altro che una mappatura della mia struttura db, qui vado a beneficiare del fatto che nel caso ci fosse un nuovo campo nella tabella, basta inserirlo qui e il gioco è fatto.
    Al contrario invece dovrei inserire tutti i metodi getter e setter.

    Ho però due domande.
    Se ho dei metodi proprietari da sviluppare che esulano dalle operazioni crud dove li vado ad inserire? all'interno del mapper? oppure si tratta di una classe seprata?

    Grazie mille

    Ciao
    Paolo
    Che mestiere difficile.....essere da soli ancora di più

  7. #7
    Non sono sicuro di aver capito bene ma il bello del model è questo:

    Codice PHP:
    class personModel extends model {
      protected 
    $fields = ( 'id''nome''cognome''firma' );

      public function 
    getFirma() {
        return 
    'Firma: ' $this->nome ' ' $this->cognome;
      }
    }

    // $data arriva dal db 
    $person = new personModel$data );
    echo 
    $person->firma
    una volta recuperati i dati dal database "id, nome, cognome" nessuno ti vieta di combinarli per ottenere nuovi dati. In questo caso "firma" non è un campo della tabella ma un campo generato da un ricalcolo dei dati in tabella..

    Il mapper a differenza del model gestisce le operazione fatte verso -> il database. Qui avrai select, insert, update ect ect, le operazioni che necessitano di comunicare con la tabella
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Fractals devi definire una classe Mapper base, astratta, con metodi base per il retrieve/save/update/delete/transactions, metodi parametrici, parametri che poi verranno "compilati" dalle varie implementazioni della classe astratta (nel tuo caso, PersonMapper fornirà le informazioni necessarie ai suddetti metodi, come l'elenco dei capi, il tipo dei capi - se vuoi -, la tabella, qual'è la primary key, come si chiama la primary key nel database, etc etc )

    se hai bisogno di metodi specifici alla entity, li devi mettere nel mapper apposito ( ad esempio un "getFamiliari(id_person)" lo metti in personmapper e non in mapper, visto che solo personMapper ha bisogno di tale metodo)
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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 © 2026 vBulletin Solutions, Inc. All rights reserved.