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
        }

    }
War es hilfreich?

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

  1. Verwenden Sie immer diese $, wenn Sie den Zugriff auf die Mitglieder Objekt wollen (es sollte $ this-> data_members in Konstruktor sein).
  2. 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top