【问题标题】:Adding to a class' variables with elements in an object使用对象中的元素添加到类的变量
【发布时间】:2011-04-17 22:42:29
【问题描述】:
$class = new Class;
$foo = json_decode($_POST['array']);

在这个高度人为的例子中,我有一个类有自己的函数和变量,等等等等。

我还刚刚解码了一个 JSON 字符串,所以这些值现在位于$foo。如何将$foo 中的元素移动到$class,以便:

$foo->name 变成 $class->name?

如果我知道所有元素是什么,那将是微不足道的,是的...除了动态,假设我希望它们全部转移,我不知道它们的名字。

【问题讨论】:

  • 我只是在完整查看您的标签之前回答了这个问题...请务必标记您正在使用的语言/平台。

标签: php javascript json object


【解决方案1】:

向您的类添加一个函数以从对象加载值,然后使用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);

【讨论】:

  • 哦,是的,当然...... foreach 也有 $key => 价值......干杯!
  • 好吧,如果你不声明它们,它们将是公共的......哦,直接迭代对象不是一个好主意,因为它们可以实现traversable 接口(此时代码不会按预期工作)。演员表(你在代码中做的)是安全的......
  • @ircmaxell 确实它们将是公开的,但这是不可避免的,除非 JSON 对象将始终包含相同的键,在这种情况下可以预先声明它们。关于traversable 的公平点,我不知道。
【解决方案2】:

你可以使用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 );
}

【讨论】:

  • 干杯 - 做到了。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多