我们如何将数组传递给php中的对象

时间:2019-02-06 07:14:47

标签: php

class A {
  public $a;
  public $b;

  function f1 () {
     // Code
  }
}

$obj = new A();

$arr = array ("a" => 1, "b" => 2);

foreach ($arr as $name => $value) {
  $obj->$name = $value;
}

return $obj;

我无法理解foreach部分。我们如何才能将数组作为对象传递并将数据作为数组获取?

2 个答案:

答案 0 :(得分:2)

foreach循环的说明:

  1. 每个循环都获得数组的键名和数组元素的值
  2. 比您在此处设置$ obj属性$ obj-> $ name = $ value;
  3. $ name被替换为数组键名,因此看起来像$ obj-> a = $ value;

要将数组传递给对象,请使用魔术设置方法:

class A {
  public $a;
  public $b;

  public function __set($property, $value) {
    if (property_exists($this, $property)) {
      $this->$property = $value;
    }

    return $this;
  }
}

$obj = new A();

$arr = array ("a" => 1, "b" => 2);

foreach ($arr as $name => $value) {
  $obj->__set($name, $value);
}

所有对象都自动作为数组,因此要以数组形式取回它,可以直接循环对象:

foreach ($obj as $key => $value) {
  print "$key => $value\n";
}

要直接从对象获取完整数组,可以创建另一个方法来为您完成此操作:

public function getAsArray() {
   $arr = array();
   foreach ($this as $key => $value) {
       $arr[$key] = $value;
   }

   return $arr;
}

答案 1 :(得分:1)

您可以检查以下代码。

d.append('blob',blob);

使用以下代码更新代码,您将获得数组。

class A {
  public $a;
  public $b;

  function f1 () {
     // Code
  }
}

$obj = new A();
$arr = array ("a" => 1, "b" => 2);
foreach ($arr as $name => $value) {
  $obj->$name = $value;
}

return $obj;
// This return obj output is :-
A Object
(
    [a] => 1
    [b] => 2
)