Немного сложная, но легко расширяемая техника:
Предположим, у вас есть массив
$a = [
'name' => 'ankit',
'age' => '33',
'dob' => '1984-04-12'
];
Предположим, у вас есть класс Person, который может иметь больше или меньше атрибутов из этого массива. например
class Person
{
private $name;
private $dob;
private $age;
private $company;
private $city;
}
Если вы все еще хотите изменить свой массив на объект person. Вы можете использовать ArrayIterator Class.
$arrayIterator = new \ArrayIterator($a); // Pass your array in the argument.
Теперь у вас есть объект-итератор.
Создайте класс, расширяющий класс FilterIterator; где вы должны определить абстрактный метод принять. Следовать примеру
class PersonIterator extends \FilterIterator
{
public function accept()
{
return property_exists('Person', parent::current());
}
}
Вышеуказанная имплементация будет связывать свойство, только если оно существует в классе.
Добавьте еще один метод в классе PersonIterator
public function getObject(Person $object)
{
foreach ($this as $key => $value)
{
$object->{'set' . underscoreToCamelCase($key)}($value);
}
return $object;
}
Убедитесь, что в вашем классе определены мутаторы. Теперь вы готовы вызывать эти функции там, где вы хотите создать объект.
$arrayiterator = new \ArrayIterator($a);
$personIterator = new \PersonIterator($arrayiterator);
$personIterator->getObject(); // this will return your Person Object.