Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    Posso? ammazza che schifo l'uso di __get e __set... è una cosa che non sopporto e non sUpporta neanche l'ide che infatti non ti suggerirà mai nulla.
    di che ide parli? __set e __get sono moooolto utili per non riscrivere mille righe di codice inutilmente, come si faceva una volta

    qui la questione è che confondono il model con il controller..
    Questa volta, più che un voto.. è favoreggiamento.

  2. #12
    Quote Originariamente inviata da Al_katraz984 Visualizza il messaggio
    qui la questione è che confondono il model con il controller..
    vabbeh su quello avevi risposto te. Scrivere i getter e i setter è la cosa piu stupida del mondo, tanto che alcuni prodotti te la danno come possibilità (mi pare PHPStorm lo faccia), è che i plugin degli IDE (non so eclipse, ma netbeans non lo fà) non ti danno la possibilità di farlo in maniera automatica e quindi uno perde un pò di tempo (quanto? 5 minuti? ), mentre le scorciatoglie con __get e __set rende impossibile sapere dall'esterno che proprietà la classe supporta e ogni volta uno dovrebbe avere la documentazione sotto mano

    oh, sarò verboso io
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #13
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    oh, sarò verboso io
    uhuhhuhuh un po' di old-school non fa mai male
    Questa volta, più che un voto.. è favoreggiamento.

  4. #14
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    56
    Quindi ragazzi tra old-school e new-school cosa conviene fare?

    Per il discorso del model-controller penso di non aver ancora capito bene, io sono messo così adesso:

    Codice PHP:
    abstract class Content
    {
        private 
    $data;
        public function 
    __set($k$v)
        {
            if(
    array_key_exists($k, static::$types))
            {
                
    $filtered_data Filter::filterByType($v, static::$types[$k]);
                if (
    $filtered_data)
                    
    $this->data[$k] = $filtered_data;
            }
        }

        public function 
    __get($k)
        {
            if(
    array_key_exists($k$this->data))
                return 
    $this->data[$k];
        }

            public function 
    getTypes()
        {
            return static::
    $types;
        }
    }

    class 
    Film extends Content
    {
        protected static 
    $types = array(
            
    'id'        =>  'int',
            
    'title'     =>  'string',
            
    'year'      =>  'int',
            
    'actor'     =>  'object'
        
    );
    }

    class 
    Actor extends Content
    {
        protected static 
    $types = array(
            
    'id'        =>  'int',
            
    'name'      =>  'string',
            
    'surname'   =>  'string',
            
    'born_year' =>  'int'
        
    );

    Ultima modifica di iJoker; 28-01-2014 a 21:53

  5. #15
    Quote Originariamente inviata da iJoker Visualizza il messaggio
    Quindi ragazzi tra old-school e new-school cosa conviene fare?

    Per il discorso del model-controller penso di non aver ancora capito bene, io sono messo così adesso:

    Codice PHP:
    abstract class Entity
    {
        private 
    $data;
        public function 
    __set($k$v)
        {
            if(
    array_key_exists($k, static::$types))
            {
                
    $filtered_data Filter::filterByType($v, static::$types[$k]);
                if (
    $filtered_data)
                    
    $this->data[$k] = $filtered_data;
            }
        }

        public function 
    __get($k)
        {
            if(
    array_key_exists($k$this->data))
                return 
    $this->data[$k];
        }

            public function 
    getTypes()
        {
            return static::
    $types;
        }
    }

    class 
    Film extends Content
    {
        protected static 
    $types = array(
            
    'id'        =>  'int',
            
    'title'     =>  'string',
            
    'year'      =>  'int',
            
    'actor'     =>  'object'
        
    );
    }

    class 
    Actor extends Content
    {
        protected static 
    $types = array(
            
    'id'        =>  'int',
            
    'name'      =>  'string',
            
    'surname'   =>  'string',
            
    'born_year' =>  'int'
        
    );

    meglio se la chiami entity e non content... il problema model-controller è che la tua classe Content rappresenta un model, non un controller.. il controller è quel pezzo di codice che ti permette di combinare i dati del db con le viste del sistema.. M con V
    Questa volta, più che un voto.. è favoreggiamento.

  6. #16
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    56
    una cosa del genere può andare bene?


    Codice PHP:
    class DB{
        private static 
    $instance;
        private 
    $dbh;

       private function 
    __construct()
        {
            
    $this->dbh = new PDO('mysql:host=localhost;dbname=ps''root''123456');
        }

       public function 
    __destruct()
        {
            
    $this->dbh NULL;
        }

       public static function 
    getInstance()
        {
            if(
    self::$instance == NULL)
                
    self::$instance = new DB();
            return 
    self::$instance;
        }
       public function 
    insert($obj$table$types)
        {
            foreach (
    $types as $k => $v)
                
    $columns[$k] = ($obj->__get($k)) ?: NULL;
            
    $columns_str implode(', 'array_keys($columns));
            
    $placeholders_str ':'.implode(', :'array_keys($columns));
            
    $stmt $this->dbh->prepare("INSERT INTO $table ($columns_str) VALUES ($placeholders_str)");
            
    $stmt->execute($columns);
            
    $obj->__set('id'$this->dbh->lastInsertId());
        }

    Ultima modifica di iJoker; 29-01-2014 a 02:07

  7. #17
    Quote Originariamente inviata da iJoker Visualizza il messaggio
    una cosa del genere può andare bene?
    Questo è un mapper...

    Un controller è molto piu semplice:

    Codice PHP:
    class filmController {

      protected 
    $mapper;
      protected 
    $view;

      public function 
    __constructPDO $pdoview $view ) {
        
    $this->mapper = new Mapper$pdo );
        
    $this->view $view;
      }

      public function 
    index() {
        
    $films $this->mapper->fetchAll();

        
    $content = new view'index-content' );
        
    $content->films $films;

        
    $this->view->title 'Index';
        
    $this->view->addContent'content'$content );
      }

      public function 
    add() {
        
    $content = new view'film-add-form' );

        
    // un metodo che usa il controller da controller
        
    $fv = new formValidator();
        
    $fv->validateEmpty'name''You must insert a value for the field [name]' );
        
    $fv->validateEmpty'description''You must insert a value for the field [description]' );

         if ( 
    $fv->checkErrors() ) {
            
    $message = new view'message'$fv->displayErrors(), array( 'class'=>'error-message' ) );
            
    $content->addView'message'$message );
            } else {
            
    $this->mapper->insert();

            
    $message = new view'message'$this->mapper->getMsg(), array( 'class'=>'service-message' ) );
            
    $content->addView'message'$message );
        }

        
    $this->view->title 'Add';
        
    $this->view->addContent'content'$content );
      }

    un ipotetico controller per i film del tuo database.. ma secondo me devi studiare un po' se hai problemi chiedi pure
    Questa volta, più che un voto.. è favoreggiamento.

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.