У меня есть функция, которая должна читать массив и динамически устанавливать свойства объекта.
class A { public $a; public $b; function set($array){ foreach ($array as $key => $value){ if ( property_exists ( $this , $key ) ){ $this->{$key} = $value; } } } } $a = new A(); $val = Array( "a" => "this should be set to property", "b" => "and this also"); $a->set($val);
Ну, очевидно, это не работает, есть ли способ сделать это?
РЕДАКТИРОВАТЬ
Кажется, что с этим кодом ничего не случилось, вопрос должен быть закрыт
http://www.php.net/manual/en/reflectionproperty.setvalue.php
Думаю, вы можете использовать Reflection
.
<?php function set(array $array) { $refl = new ReflectionClass($this); foreach ($array as $propertyToSet => $value) { $property = $refl->getProperty($propertyToSet); if ($property instanceof ReflectionProperty) { $property->setValue($this, $value); } } } $a = new A(); $a->set( array( 'a' => 'foo', 'b' => 'bar' ) ); var_dump($a);
Выходы:
object(A)[1] public 'a' => string 'foo' (length=3) public 'b' => string 'bar' (length=3)
Вам нужно только снять скобки {} и работать! -> $this->$key = $value;