Domanda

Io ho questo piccolo frammento di codice, voglio essere in grado di definire ogni elemento dell'array come nuovo membro di dati.

class Core_User
{
     protected $data_members = array(
         'id'               =>  '%d',
         'email'            => '"%s"',
         'password'         => '"%s"',
         'title'            => '"%s"',
         'first_name'       => '"%s"',
         'last_name'        => '"%s"',
         'time_added'       =>  '%d' ,
         'time_modified'    =>  '%d' ,
         );

    function __construct($id = 0, $data = NULL)
    {
        foreach($this->data_members as $member){
           //protected new data member
        }

    }
È stato utile?

Soluzione

  

// protetta nuovo membro dati

Non sarà in grado di creare una proprietà non pubblica in fase di esecuzione. Se protetta è di primaria importanza, è possibile dichiarare una matrice protetta o una chiave oggetto e di inserimento / valori in esso nel costruttore

Altri suggerimenti

  1. uso sempre $ questo quando si vuole i membri dell'oggetto di accesso (che dovrebbe essere $ this-> data_members in costruttore).
  2. Si può provare a definire metodi magici __get & __set (non sono sicuro se possono essere protetti però). :

    protected function __get($name){                  
     if (array_key_exists($name,$this->data_memebers))
     {
         return $this->data_memebers[$name];
     }         
     throw new Exception("key $name doesn't not exist");  
    }  
    protected function __set($name,$value){
     if (array_key_exists($name,$this->data_memebers))
     {
         $this->data_memebers[$name] = $value;
     }
     throw new Exception("key $name doesn't not exist");
    } 
    

Che cosa si vuole raggiungere è possibile, tuttavia non sarà in grado di rendere il nuovo proprietà protected (come questo è possibile solo per i membri predefiniti).

function __construct($id = 0, $data = NULL)
{
    foreach($this->$data_memebers as $name => $value ){
       $this->$name = $value;
    }
}

Si noti l'uso del $ prima name in $this->$name:. Questo rende PHP utilizzare il valore corrente della variabile $name come proprietà

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top