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