Etwas komplizierte, aber leicht zu erweiternde Technik:
Angenommen, Sie haben ein Array
$a = [
'name' => 'ankit',
'age' => '33',
'dob' => '1984-04-12'
];
Angenommen, Sie haben eine Person-Klasse, die mehr oder weniger Attribute aus diesem Array haben kann. zum Beispiel
class Person
{
private $name;
private $dob;
private $age;
private $company;
private $city;
}
Wenn Sie Ihr Array trotzdem in ein Personenobjekt umwandeln wollen. Sie können die Klasse ArrayIterator verwenden.
$arrayIterator = new \ArrayIterator($a); // Pass your array in the argument.
Jetzt haben Sie ein Iterator-Objekt.
Erstellen Sie eine Klasse, die die Klasse FilterIterator erweitert; dort müssen Sie die abstrakte Methode accept definieren. Folgen Sie dem Beispiel
class PersonIterator extends \FilterIterator
{
public function accept()
{
return property_exists('Person', parent::current());
}
}
Die obige Impelmentierung bindet die Eigenschaft nur, wenn sie in der Klasse vorhanden ist.
Hinzufügen einer weiteren Methode in der Klasse PersonIterator
public function getObject(Person $object)
{
foreach ($this as $key => $value)
{
$object->{'set' . underscoreToCamelCase($key)}($value);
}
return $object;
}
Stellen Sie sicher, dass Sie Mutatoren in Ihrer Klasse definiert haben. Jetzt können Sie diese Funktionen dort aufrufen, wo Sie ein Objekt erstellen möchten.
$arrayiterator = new \ArrayIterator($a);
$personIterator = new \PersonIterator($arrayiterator);
$personIterator->getObject(); // this will return your Person Object.