Question

J'ai ce petit bout de code, je veux être en mesure de définir chaque élément de tableau en tant que nouveau membre de données.

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
        }

    }
Était-ce utile?

La solution

  

// nouveau membre de données protégé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é et insérer la clé / valeurs dans dans le constructeur

Autres conseils

  1. Utilisez toujours $ quand vous voulez les membres de l'objet d'accès (il devrait être $ this-> data_members dans le constructeur).
  2. Vous pouvez 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");
    } 
    

Qu'est-ce que vous voulez atteindre est possible, mais vous ne serez pas en mesure de faire les nouvelles propriétés protected (comme cela est 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 l'utilisation de PHP la valeur actuelle de la variable $name comme propriété

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top