Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: PHP OOP StdMethod

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

    PHP OOP StdMethod

    Supponiamo di avere una classe con i seguenti metodi
    Codice PHP:
    class objtest{
        public 
    $id;
        public 
    $a;
        public 
    $b;
        
        public function 
    __get($property) {
            if (
    property_exists($this$property)) {
                return 
    $this->$property;
            }
        }

        public function 
    __set($property$value) {
            if (
    property_exists($this$property)) {
                
    $this->$property $value;
            }
            return 
    $this;
        }

        public 
    getObjTestById($id){
            
    //select al db e return array
        
    }
        
        public 
    getAllObjTest(){
            
    //select al db e return array
        
    }    

        public function 
    Moltiplica(){
            return 
    $a $b;
        }
        
        
    publi CaricaObjTest($id){
            
    //select e utilizzo delle funzioni __get e __set in modo da valorizzare le proprietà
        
    }

    Mettiamo il caso che sia nel caso di dover selezionare l'oggetto dal mio database e successivamente
    utilizzare una serie di metodi (es Moltiplica) prorpie dell'oggetto

    E' corretto inserire un metodo che oltre a selezionare il record dal database valorizzi anche le proprietà,
    in modo da poter poi richiamare tutti i metodì?

    Spero di essermi spiegato, dato che per me non è un argomento banale

    Grazie a tutte le persone che mi daranno una mano.

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

  2. #2
    intanto, essendo le proprietà pubbliche, quando fai una get/set su $a, non vengono chiamate __get e __set, ma vengono chiamate solo se le porprietà sono inaccessibili (quindi in protected/private)

    secondo, non ho capito la domanda ... la classe definisce un contratt(in)o col mondo esterno grazie ai metodi/proprietà pubbliche, quindi che devi fare?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    terzo: in "Moltiplica" devi usare $this->a e $this->b, non $a e $b
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    intanto, essendo le proprietà pubbliche, quando fai una get/set su $a, non vengono chiamate __get e __set, ma vengono chiamate solo se le porprietà sono inaccessibili (quindi in protected/private)

    secondo, non ho capito la domanda ... la classe definisce un contratt(in)o col mondo esterno grazie ai metodi/proprietà pubbliche, quindi che devi fare?
    Ok per questo.

    Il mio problema è se io mi trovo nella situazione di dover caricare i dati dal db, e poi eseguire una serie di metodi che interagiscono con le proprietà, è corretto avere un metodo "CaricaObjTest" che effettua la selezione dei dati dal db e valorizza le proprietà?
    Che mestiere difficile.....essere da soli ancora di più

  5. #5
    Corretto... in OOP non c'è praticamente niente di corretto, per questo si sono codificati i design patterns che indicano il mondo convenzionalmente accettato, più testato e teoricamente più esatto per affrontare e risolvere una problematica. Nel tuo caso potrei dirti che è corretto, è più semplice però se fai in modo che l'oggetto sua un semplice POJO (forse in php si può dire POPO? ) con solo i metodi get e set e lo fai popolare da un altro oggetto. Esempio: se l'oggetto si chiama Prodotto, lo fai popolare da un RepositoryProdotti: repository prodotti farà le query e popolare oggetti Prodotto. Cmq ci sono vari modi, anche il tuo è un modo:

    http://martinfowler.com/eaaCatalog/repository.html (che è alquanto una figata )

    http://martinfowler.com/eaaCatalog/t...taGateway.html ( direi che sia abbastanza superato ormai )

    http://martinfowler.com/eaaCatalog/rowDataGateway.html ( peggio mi sento )

    http://martinfowler.com/eaaCatalog/activeRecord.html (che è quello che vorresti fare te)

    http://martinfowler.com/eaaCatalog/dataMapper.html (che è una cosa che definire complicata è fargli un complimento)

    http://www.doctrine-project.org/ (per prendere spunto)
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    http://martinfowler.com/eaaCatalog/activeRecord.html (che è quello che vorresti fare te)
    Si sembra proprio quello che voglio fare io.
    Però non ho trovato una documentazione su come creare una classe aderente al patter activerecord.
    Solo documentazione di framework che spiegano come utilizzare il loro active records.
    Che mestiere difficile.....essere da soli ancora di più

  7. #7
    active record non è un pattern
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    e che cosa è allora, e come faccio a integrarlo nella mia applicazione?
    Che mestiere difficile.....essere da soli ancora di più

  9. #9
    --- errore ----
    Ultima modifica di Santino83_02; 12-11-2013 a 17:24
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Allora,


    partiamo da un esempio base base con tutti i suoi problemi:


    Codice PHP:
    class Person{   
    private 
    $id;   private $firstname;   private $lastname;
       private 
    $db//a PDO instance      public function __construct($firstname = null, $lastname = null){        $this->firstname = $firstname;        $this->lastname = $lastname;   }      public function setConnection(PDO $db){        $this->db = $db;   }      public function load($id){        $sql = "select * from people where id = :ID";                $sth = $this->db->prepare($sql);        $sth->execute(array(':ID' => $id ));        $result = $sth->fetch(PDO::FETCH_ASSOC);                $this->id = $result['id'];        $this->firstname = $result['firstname'];        $this->lastname = $result['lastname'];   }      public function getFirstname(){        return $this->firstname;   }      public function getLastname(){        return $this->lastname;   }      public function getId(){        return $this->id;   }   //add set methods and others (like save/delete methods)} 

    e poi la usi tipo così:


    Codice PHP:
    //apro la connessione al database$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    $person = new Person();$person->setConnection($db);$person->load(1); //carico il record con id=1echo $person->getFistname().' '.$person->getLastname(); 

    immagina da solo del perchè poi si usino dei frameworks per fare queste cose

    EDIT: vabbeh sto editor de mer*a mi sformatta il codice, rimettitelo a posto
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.