Definire i membri di dati all'interno costruttore
-
02-10-2019 - |
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
}
}
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
- uso sempre $ questo quando si vuole i membri dell'oggetto di accesso (che dovrebbe essere $ this-> data_members in costruttore).
-
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à