首页 > 解决方案 > 我们如何将数组传递给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部分。我们如何将数组作为对象传递并将该数据作为数组获取?

标签: php

解决方案


你的 foreach 循环的解释:

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

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

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;
}

推荐阅读