我们如何传递数组到PHP对象

问题描述 投票:1回答:2
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
2个回答
1
投票

你可以请检查下面的代码。

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
)

更新与下面的代码你的代码你会得到阵列。

return (array)$obj;
//Output 

Array
(
    [a] => 1
    [b] => 2
)

2
投票

您的foreach循环的说明:

  1. 每次循环你数组元素的数组和值的键名
  2. 比你设置$ OBJ财产这里$ OBJ - > $名称= $价值;
  3. $名称被替换,因此它看起来像$ obj-> a = $值数组的键名;

要通过阵列对象,使用魔法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;
}
© www.soinside.com 2019 - 2024. All rights reserved.