Intereting Posts
Встроенные изображения, превышающие длину Как получить размер ресурса изображения в байтах с PHP и GD? Что такое «Ресурс №»? Невозможно получить отношение от одного до многих в Laravel 4 Отладка php с Netbeans – Запрос источника новостей json_encode (): Недопустимая последовательность UTF-8 в аргументе Удалить текст за пределами скобок подход для «сайта вниз для обслуживания» Передача переменной FROM flash в HTML / php Как исправить эту ошибку «mysql_fetch_assoc () ожидает, что параметр 1 будет ресурсом, boolean задан в«? Блокирование спама комментариев без использования captcha Использование PDO для извлечения определенных значений из базы данных mysql с использованием php Как хорошо использовать многоядерные процессоры в ваших PHP / MySQL приложениях? Автозагрузчик ZF для загрузки предка и запрошенного класса Как подключиться к пользовательской базе данных в codeigniter

Добавление свойств к объекту с помощью ключей массива

Можно ли построить такую ​​конструкцию. Скажем, у меня есть массив вроде этого:

$names = array ('name1', 'name2', 'name3'); $values = array ('value1', 'value2', 'value3'); 

И тогда я хочу сделать следующее:

 foreach ($names as $field) { $this->$field = $values[$counter]; $counter ++; } 

Так что позже я могу получить доступ к указанному объекту следующим образом:

 $var1 = $object->name1; $var2 = $object->name2; // produces "value1" echo $var1; // produces "value2" echo $var2; 

То, что я хочу сделать, – это иметь объект, который имеет динамически названные поля. Возможно ли это с помощью OO PHP?

Solutions Collecting From Web of "Добавление свойств к объекту с помощью ключей массива"

Да, ты можешь

 $object = (object)array_combine($names , $values); 

Как было предложено @Sam, метод Magic __set работает лучше

Да, это сработает, но обычно переменные переменные не рекомендуется.

Возможно, более элегантным решением было бы использовать метод __get magic в классе следующим образом:

 class Person { public function __construct($vars) { $this->vars = $vars; } public function __get($var) { if (isset($this->vars[$var])) { return $this->vars[$var]; } return null; } } 

Тогда массив варов будет работать так:

 $vars = array( 'name1' => 'value1', 'name2' => 'value2', 'name3' => 'value3', ); $object = new Person($vars); 

Или, если вы специально хотите построить его из двух массивов:

 $vars = array_combine($names, $values) 

Используя специально сконфигурированный ArrayObject , вы можете получить доступ к элементам, используя либо синтаксис:

 $object = new ArrayObject(array_combine($names, $values), ArrayObject::ARRAY_AS_PROPS); echo $object->name1; // value1 echo $object['name1']; // value1