Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 23

Hybrid View

  1. #1
    che collegamento c'è tra "persona" e "impegato" oltre alla generalizzazione?

    non si capisce bene cosa identifica la classe "persona" è troppo generica..
    Ultima modifica di Al_katraz984; 21-11-2013 a 18:29
    Questa volta, più che un voto.. è favoreggiamento.

  2. #2
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Questo potrebbe essere un buon punto di partenza: http://docs.doctrine-project.org/en/...e-mapping.html

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166
    In comune persone e impiegati hanno gli attributi dell'anagrafica e i metodi per la gestione degli attributi comuni.
    volevo capire se in genere è bene distinguere i dati e i metodi in questo esempio di persone e impiegati, se un giorno avrò bisogno di gestire la classe studenti (che è sempre una persona) potrei limitarmi a gestire la sola matricola e con una classe a parte gestire gli esami sostenuti.

    La soluzione 2 che tu indichi potrebbe essere corretta?
    person
    id | nome | cognome | eta
    worker
    id| pid | data_assunzione | qualifica

    In questo caso come imposteresti i metodi?
    Grazie per la pazienza

  4. #4
    Quote Originariamente inviata da artex Visualizza il messaggio
    La soluzione 2 che tu indichi potrebbe essere corretta?
    person
    id | nome | cognome | eta
    worker
    id| pid | data_assunzione | qualifica

    In questo caso come imposteresti i metodi?
    Grazie per la pazienza
    Il problema di questo approccio è che se vuoi distinguere i diversi "tipi" di pesona dovrai aggiungere dei flag sulla tabella

    es
    person
    id | nome | cognome | eta | isWorker | isFreelance
    worker
    id| pid | data_assunzione | qualifica
    freelance
    id| pid | data_contratto | mansione

    in questo modo faciliti la selezione delle persone ma avrai tanti flags quanti "tipi" di persona presenti nel tuo sistema. Qui puoi gestire tutto con una classe

    Io invece a livello di tabelle opterei per:
    user
    id | nome | mail | password | data_registrazione
    impiegato
    id | nome | mail | password | data_registrazione | data_assunzione | mansioni

    nonostante la ripetizione di alcuni campi in questo modo sei aggevolato a livello di codice e puoi tenere nettamente separati i due tipi di persone.

    a livello di codice
    Codice PHP:
    abstract class person {
      protected 
    $fields = array();
      protected 
    $table;
      protected 
    $pdo;

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

      
    // magic method __setter e __getter
      // metodi c.r.u.d comuni
      // metodi per login e logout
    }

    class 
    user extends person {
      protected 
    $fields = array( 'id''nome''mail''password''data_registrazione' );
      protected 
    $table 'user';

      
    //metodo specifico
      
    public function fetchByName$name ) {
        
    $selectQuery "SELECT * FROM $this->table WHERE name = :name LIMIT 0,1";
        
    $stmt $this->pdo->prepare$selectQuery );
        
    // ect ect

        
    return $userByName;
      }
    }

    class 
    employee extends person {
      protected 
    $fields = array( 'id''nome''mail''password''data_registrazione''data_assunzione''mansioni' );
      protected 
    $table 'impiegato';
      private 
    $msg;

      
    //metodo specifico
      
    public function fetchMansioni$id ) {
        
    $selectQuery "SELECT mansioni FROM $this->table WHERE id = :id LIMIT 0,1";
        
    $stmt $this->pdo->prepare$selectQuery );
        
    // ect ect

        
    return $mansioni;
      }

      public function 
    closeOrder$oid ) {
        
    $query "UPDATE orders SET closed = 1 WHERE id = :id";
        if ( 
    $this->pdo->execute$query ) ) {
          
    $this->msg "ordine chiuso";
        }
      }

      public function 
    getMsg() {
        return 
    $this->msg;
      }

    Come vedi in questo modo puoi distinguere nettamente le due persone e fargli compiere funzioni diverse.. questo è solo uno dei tanti modi per risolvere il tuo problema..
    Questa volta, più che un voto.. è favoreggiamento.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166
    Grazie All_katraz984,
    un chiarimento visto che non ho molta dimestichezza con la classe PDO. Come crei l'istanza di person?

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166
    Leggendo la guida indicata da garakkio capisco che l'argomento è complesso ...
    ringrazio tutti per la pazienza.
    Se poi nel forum ci fosse qualcuno che ha già fatto una classe generica e vuole dirmi la strada da seguire per le classi derivate e il metodo che lui segue per gestire la persistenza dei dati gli sarei grato.

    Grazie

  7. #7
    person non è istanziabile, è una classe astratta.. serve solo per raggruppare le funzioni comuni a user e impiegato

    Codice PHP:
    $pdo = new PDO$accessi );

    $user = new user$pdo );
    var_dump$user->fetchByName'paolo' ) ); 
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166
    ha non avevo visto,
    quindi i metodi CRUD della classe person sono astratti e vanno definiti nelle sottoclassi?

  9. #9
    Quote Originariamente inviata da artex Visualizza il messaggio
    ha non avevo visto,
    quindi i metodi CRUD della classe person sono astratti e vanno definiti nelle sottoclassi?
    se fosse cosi la classe person non servirebbe a niente... i metodi nella classe person sono normali..
    Questa volta, più che un voto.. è favoreggiamento.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166
    Hai ragione, allora si può dire che person è astratta perchè non venga istanziata direttamente?
    hai scelto molto bene lo smiley

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.