遍历对象php的所有属性


84

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

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

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

像这样

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

1
foreach循环前进,您做对了
Shakti Singh

6
使用foreach(带有=>not ->)迭代对象的公共属性。如果您想要其他行为,也可以使您的班级可遍历
netcoder 2011年

@netcoder:谢谢,但那只是一个错字
Daric

2
正如netcoder所说:只有公共财产才可以使用
Andreas

Answers:


139

如果这仅用于调试输出,则可以使用以下内容查看所有类型和值。

var_dump($obj);

如果要对输出进行更多控制,可以使用以下命令:

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

9
如果对象不是数组,则“ stdClass类的对象无法转换为字符串”很可能是导致的错误。
降落

print_r($ obj); 也可以提供帮助。递归打印给定对象的字段。
fandasson

8

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

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

1

这是表达对象属性的另一种方法。

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

2
这仅在对象实现\ArrayAccess或为时才有效array,否则将引发以下情况:FATAL ERROR Uncaught Error: Cannot use object of type SomeType as array
NoodleOfDeath

1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.