Добавление в класс переменных с элементами в объекте - PullRequest
2 голосов
/ 27 сентября 2010
$class = new Class;
$foo = json_decode($_POST['array']);

В этом очень надуманном примере у меня есть класс со своими собственными функциями и переменными, бла-бла.

Я также только что декодировал строку JSON, поэтому эти значения теперь находятся в $foo.Как переместить элементы в $foo в $class, чтобы:

$foo->name стало $class->name?

Было бы тривиально, если бы я знал, что все элементы были, да ... за исключением того, чтобы быть динамичным, допустим, я хочу, чтобы они все были перенесены, и я не знаю их имен.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2010

Вы можете использовать get_object_vars:

$vars = get_object_vars($foo);
foreach ($vars as $key => $value) {
    $class->$key = $value;
}

Вы также можете реализовать это в своем классе:

public function bindArray(array $data) {
    foreach ($data as $key => $value) {
        $this->$key = $value;
    }
}

И затем привести объект вмассив:

$obj->bindArray( (array) $foo );

или добавить метод для этого тоже:

public function bindObject($data) {
     $this->bindArray( (array) $data );
}
1 голос
/ 27 сентября 2010

Добавьте функцию в ваш класс для загрузки значений из объекта, а затем используйте foreach, чтобы перебрать свойства объекта и добавить их в класс (вам не нужно объявлять членов вашего класса перед их инициализацией):

class Class
{
  function load_values($arr)
  {
    foreach ($arr as $key => $value)
    { 
      $this->$key = $value;
    }
  }
}

$class = new Class;
$foo = json_decode($_POST['array']);
$class->load_values((array)$foo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...