Reputation: 16769
How can I loop through all the properties of object?. Right now I have to write a new code line to print each property of object
echo $obj->name;
echo $obj->age;
Can I loop through all the properties of an object using foreach loop or any loop?
Something like this
foreach ($obj as $property => $value)
Upvotes: 121
Views: 158100
Reputation: 1060
Using get_object_vars
is better than applying a foreach
directly to the object since your code will be also compliant with PHPStan which requires that foreach
is applied only to iterables (see https://github.com/phpstan/phpstan/issues/1060).
Thus, the best choice is go like this:
foreach (get_object_vars($obj) as $key => $value) {
echo "$key => $value\n";
}
Upvotes: 3
Reputation: 1031
Sometimes, you need to list the variables of an object and not for debugging purposes. The right way to do it is using get_object_vars($obj)
. It returns an array that has all the visible class variables and their value. You can then loop through them in a foreach-loop. If used within the object itself, simply do get_object_vars($this)
.
Upvotes: 3
Reputation: 367
Before you run the $obj
through a foreach
loop you have to convert it to an array
(see: cast to array) if you're looking for properties regardless of visibility.
Example with HTML output (PHP 8.1):
foreach ((array)$obj as $key => $val) {
printf(
"%s: %s<br>\n",
htmlspecialchars("$key"),
htmlspecialchars("$val"),
);
}
Upvotes: 9
Reputation: 23
David's answer is solid as long as either: a) you only need access to public attributes, or b) you are working with the stdClass object. If you have defined private or protected attributes in a class and want to display all attributes, simply add an instance method that iterates the properties:
class MyClass {
public $public_attr1;
private $private_attr2;
protected $protected_attr3;
function iterateAttributes() {
foreach ($this as $attr=>$value) {
echo "$attr: $value <br/>";
}
}
}
Upvotes: 0
Reputation: 269
For testing purposes I use the following:
//return assoc array when called from outside the class it will only contain public properties and values
var_dump(get_object_vars($obj));
Upvotes: 16
Reputation: 403
Here is another way to express the object property.
foreach ($obj as $key=>$value) {
echo "$key => $obj[$key]\n";
}
Upvotes: 1
Reputation: 36542
If this is just for debugging output, you can use the following to see all the types and values as well.
var_dump($obj);
If you want more control over the output you can use this:
foreach ($obj as $key => $value) {
echo "$key => $value\n";
}
Upvotes: 181