Определите элементы данных в конструкторе
-
02-10-2019 - |
Вопрос
У меня есть этот маленький фрагмент кода, я хочу быть в состоянии определить каждый элемент массива в качестве нового элемента данных.
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
}
}
Решение
// Защищенные новые данные
Вы не сможете создать непубличное свойство во время выполнения. Если защищены PAMPLOUT, вы можете объявить защищенный массив или объект и вставить ключ / значения в него в конструкторе
Другие советы
- Всегда используйте $ this, когда вы хотите получить доступ к участникам объекта (это должно быть $ this-> data_members в конструкторе).
Вы можете попробовать определить магические методы __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"); }
То, что вы хотите достичь, возможно, однако вы не сможете внести новые свойства protected
(Как это возможно только для предопределенных членов).
function __construct($id = 0, $data = NULL)
{
foreach($this->$data_memebers as $name => $value ){
$this->$name = $value;
}
}
Обратите внимание на использование $
до name
в $this->$name
: Это делает PHP использовать текущее значение $name
переменная как свойство.