2010-04-29 5 views
2

J'ai ce petit extrait de code, je veux être en mesure de définir chaque élément de tableau comme un nouveau membre de données.Définir des membres de données dans le constructeur

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 
     } 

    } 

Répondre

0

// protégé nouveau membre de données

Vous ne serez pas en mesure de créer une propriété non publique à l'exécution. Si la protection est primordiale, vous pouvez déclarer un tableau ou un objet protégés et insérez des valeurs clés/en dans les membres du constructeur

0

Qu'est-ce que vous voulez atteindre est possible, mais vous ne serez pas en mesure de faire les nouvelles propriétés protected (car cela est uniquement possible pour les membres prédéfinis).

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

Notez l'utilisation du $ avant name en $this->$name: Cela rend PHP utilise la valeur actuelle de la variable $name comme propriété.

0
  1. Toujours utiliser ce $ lorsque vous souhaitez accéder à l'objet (il devrait être $ this-> data_members en constructeur).
  2. Vous pouvez essayer de définir des méthodes magiques __get & __set (je ne sais pas si elles peuvent être protégées si). :

    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"); 
    } 
    
Questions connexes