Definieren Sie Datenelemente innerhalb Konstruktor
-
02-10-2019 - |
Frage
Ich habe habe diesen kleinen Code-Schnipsel, mag ich in der Lage sein, jedes Array-Element als neues Datenelement zu definieren.
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
}
}
Lösung
// geschützt neues Datenelement
Sie werden nicht in der Lage sein, ein nicht-öffentliches Eigentum zur Laufzeit zu erstellen. Wenn geschützt von größter Bedeutung ist, können Sie eine geschützte Array oder Objekt und Einfügen-Taste / Werte in es im Konstruktor deklarieren
Andere Tipps
- Verwenden Sie immer diese $, wenn Sie den Zugriff auf die Mitglieder Objekt wollen (es sollte $ this-> data_members in Konstruktor sein).
-
Sie können versuchen, magische Methoden definieren __get & __set (Ich bin nicht sicher, ob sie geschützt werden können, obwohl). :
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"); }
Was Sie wollen, ist möglich zu erreichen, aber Sie werden nicht in der Lage sein, die neuen Eigenschaften protected
zu machen (wie dies für vordefinierte nur für Mitglieder möglich ist).
function __construct($id = 0, $data = NULL)
{
foreach($this->$data_memebers as $name => $value ){
$this->$name = $value;
}
}
Beachten Sie die Verwendung des $
vor name
in $this->$name
. Das macht PHP den aktuellen Wert des $name
Variable als Eigenschaft