Определить элементы данных в конструкторе - PullRequest
2 голосов
/ 29 апреля 2010

У меня есть небольшой фрагмент кода, я хочу иметь возможность определять каждый элемент массива как новый элемент данных.

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
        }

    }

Ответы [ 3 ]

0 голосов
/ 29 апреля 2010

// защищенный новый элемент данных

Вы не сможете создать закрытое свойство во время выполнения. Если защищенный имеет первостепенное значение, вы можете объявить защищенный массив или объект и вставить в него ключ / значения в конструкторе

0 голосов
/ 29 апреля 2010
  1. Всегда используйте $ this, когда вы хотите получить доступ к членам объекта (это должно быть $ this-> data_members в конструкторе).
  2. Вы можете попробовать определить магические методы __get & __set (хотя я не уверен, что их можно защитить). :

    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");
    } 
    
0 голосов
/ 29 апреля 2010

То, чего вы хотите достичь, возможно, однако вы не сможете сделать новые свойства protected (так как это возможно только для предопределенных членов).

function __construct($id = 0, $data = NULL)
{
    foreach($this->$data_memebers as $name => $value ){
       $this->$name = $value;
    }
}

Обратите внимание на использование $ перед name в $this->$name: это заставляет PHP использовать текущее значение переменной $name в качестве свойства.

...