代码之家  ›  专栏  ›  技术社区  ›  johnjohn

将值从数组传递到对象?- PHP

  •  3
  • johnjohn  · 技术社区  · 14 年前

    我的问题简化为:

    
    class A {
      public $a;
      public $b;
    
      function f1 () {
         // Code
      }
    }
    
    $obj = new A();
    
    $arr = array ("a" => 1, "b" => 2);
    

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

    谢谢您。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Paige Ruten    14 年前

    foreach循环和变量:

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

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

        2
  •  2
  •   Shubham    14 年前

    您也可以使用 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
  •  1
  •   iroel    14 年前

    与(放弃受保护的私人成员)相同:

    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()方法。