【问题标题】:Looping through all the properties of object php循环遍历对象php的所有属性
【发布时间】:2011-02-12 06:04:36
【问题描述】:

如何循环遍历对象的所有属性?现在我必须编写一个新的代码行来打印对象的每个属性

echo $obj->name;
echo $obj->age;

我可以使用 foreach 循环或任何循环遍历对象的所有属性吗?

类似的东西

foreach ($obj as $property => $value)  

【问题讨论】:

  • 继续使用foreach 循环你做对了
  • 使用foreach(=> 而不是->)遍历对象的public 属性。如果你想要其他行为,你也可以让你的班级Traversable。
  • @netcoder:谢谢,但这只是一个错字
  • 正如 netcoder 所说:只有公共属性可以访问

标签: php


【解决方案1】:

如果这只是为了调试输出,你也可以使用以下来查看所有类型和值。

var_dump($obj);

如果你想更好地控制输出,你可以使用这个:

foreach ($obj as $key => $value) {
    echo "$key => $value\n";
}

【讨论】:

  • 如果对象不是数组,“stdClass 类的对象无法转换为字符串”很可能会导致错误。
  • print_r($obj);也可以提供帮助。递归打印给定对象的字段。
【解决方案2】:

出于测试目的,我使用以下内容:

//return assoc array when called from outside the class it will only contain public properties and values 
var_dump(get_object_vars($obj)); 

【讨论】:

    【解决方案3】:

    这是表示对象属性的另一种方式。

    foreach ($obj as $key=>$value) {
        echo "$key => $obj[$key]\n";
    }
    

    【讨论】:

    • 这仅在对象实现\ArrayAccess或者是array时有效,否则抛出以下内容:FATAL ERROR Uncaught Error: Cannot use object of type SomeType as array
    【解决方案4】:

    有时,您需要列出对象的变量,而不是出于调试目的。正确的方法是使用 get_object_vars($object)。它返回一个包含所有类变量及其值的数组。然后,您可以在 foreach 循环中遍历它们。如果在对象本身中使用,只需执行 get_object_vars($this)

    【讨论】:

      【解决方案5】:

      在通过 foreach 循环运行 $object 之前,您必须将其转换为数组:

      $array = (array) $object;  
      
       foreach($array as $key=>$val){
            echo "$key: $val";
            echo "<br>";
       }
      

      【讨论】:

        【解决方案6】:

        David 的回答是可靠的,只要:a)您只需要访问公共属性,或者 b)您正在使用 stdClass 对象。如果您在一个类中定义了私有或受保护的属性并希望显示所有属性,只需添加一个迭代属性的实例方法:

        class MyClass {
        
          public $public_attr1;
          private $private_attr2;
          protected $protected_attr3;
        
          function iterateAttributes() {
            foreach ($this as $attr=>$value) {
              echo "$attr: $value <br/>";
            }
          }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-26
          • 2021-11-20
          • 2016-09-09
          • 1970-01-01
          • 2014-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多