Вы упомянули SPL. Но, не зная точных требований к цели вашего объекта, ниже приводится единственная информация, которую я могу дать ...
Возможно, ваш объект расширит класс встроенного SPL ArrayIterator
. Затем, не обращая внимания на его обработки в конструкторе (уже обрабатываются в классе родительского ArrayIterator
), вы можете импортировать массив в ваш объект просто так:
class testClass extends ArrayIterator
{
/* child '__construct' method not required */
/* rest of your code here */
}
$t = new testClass(array('name' => 'asdf', 'age' => 99));
Имейте в виду, что с присвоенным ArrayIterator
поведения, вы не можете позже получите доступ к любому из переданных значений массива, как и к обычному объекту. Вы должны получить доступ к ним, как вы бы массив:
echo $t['name']; // 'asdf'
echo $t->name; // NULL property unknown error
И, внутренне, переданный массив хранится в вашем объекте в качестве одного частного storage
параметра. В вашем случае у вас уже есть все ваши свойства объекта, предварительно определенные и добавленные с помощью подчеркивания, поэтому вам, вероятно, придется вручную петлевать над $this
или $params
в любом случае в вашем конструкторе для установки любых реальных свойств объекта.
Вы могли бы, конечно, переопределить все ArrayIterator
наследуемые методы вашего ребенка объекта обрабатывать ваше специальное свойство именования дела по get
или set
, но это, казалось бы излишним и непродуктивным, а не просто цикл над $params
/установка $this
в любом случае в конструкторе.
public function __construct(array $params)
{
foreach ($params as $key => $val) {
if (property_exists($this, "_$key")) {
$this->{"_$key"} = $val;
}
}
}
Так, просто цикл по $params
/установка $this
в конструкторе, вероятно, самый лучший, самый простое решение есть.
Очевидное решение - это просто '$ this -> _ name = $ params ['name'];' в конструкторе. Что делает ваш объект? Будет ли решение быть чем-то более сложным? –
@ bob-the-destroyer - представленный пример является упрощенным вариантом использования. На самом деле будет множество свойств для установки - все они являются необязательными. –
что-то просто перевернулось бы над '$ this' или' $ params'? Вы упомянули SPL - вы думали, что цель объекта вести себя как массив или что-то еще? –