【问题标题】:Pass values from array to object? - PHP将值从数组传递到对象? - PHP
【发布时间】:2011-03-19 21:05:15
【问题描述】:

我的问题,简化为:


class A {
  public $a;
  public $b;

  function f1 () {
     // Code
  }
}

$obj = new A();

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

如何将$arr 的内容放入$obj 中? (显然没有$obj->a = $arr["a"],假设有上千个值)

谢谢。

【问题讨论】:

    标签: php arrays oop


    【解决方案1】:

    一个foreach循环和一个变量变量:

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

    不过,您的课程中可能不应该有数千个变量。

    【讨论】:

      【解决方案2】:

      你也可以使用get_class_vars()这样的函数——

      <?php
      class A {
        public $a;
        public $b;
      
        function f1 () {
           // Code
        }
      }    
      
      $obj = new A();   
      
      $arr = array ("a" => 1, "b" => 2);
      
      $vars = get_class_vars("A");
      
      foreach($vars as $var=>$value)
          $obj->$var = $arr[$var];
      
      print_r($obj);
      ?>
      

      【讨论】:

        【解决方案3】:

        与(丢弃受保护和私有成员)相同:

        foreach ($obj as $property_name => $property_value) {
            if (array_key_exists($property_name, $arr))
                //discarding protected and private member
                $obj->$property_name = $arr[$property_name];
        }
        

        或者只是在 A 类上添加迭代方法:

        class A {
            public $a;
            public $b;
        
            function iterate($array) {
                foreach ($this as $property_name => $property_value) {
                    if (array_key_exists($property_name, $array))
                        $this->$propety_name = $array[$property_name];
                }
            }
            function f1 () {
                // Code
            }
        } 
        

        并使用 iterate() 方法。

        【讨论】:

        • 最后一个代码会影响私有成员和受保护成员,与前面的代码相比。所以根据自己的需要来选择吧。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-12
        • 2016-03-15
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        相关资源
        最近更新 更多