Définir les membres de données dans le constructeur
-
02-10-2019 - |
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
}
}
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
- Utilisez toujours $ quand vous voulez les membres de l'objet d'accès (il devrait être $ this-> data_members dans le constructeur).
-
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é