Перебираем все свойства объекта php

88

Как я могу просмотреть все свойства объекта? Сейчас мне нужно написать новую строку кода для печати каждого свойства объекта.

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

Могу ли я просмотреть все свойства объекта с помощью цикла foreach или любого другого цикла?

Что-то вроде этого

foreach ($obj as $property => $value)  
Дарич
источник
1
Иди с головой в foreachпетлю, ты делаешь правильно
Шакти Сингх
6
Используйте foreach=>not ->) для итерации по общедоступным свойствам объекта . Вы также можете сделать свой класс Traversable, если хотите другое поведение.
netcoder
@netcoder: спасибо, но это была всего лишь опечатка
Дарик
2
как сказал сетевой кодер: будут доступны только общедоступные свойства
Андреас

Ответы:

146

Если это только для вывода отладки, вы также можете использовать следующее, чтобы увидеть все типы и значения.

var_dump($obj);

Если вам нужен больший контроль над выводом, вы можете использовать это:

foreach ($obj as $key => $value) {
    echo "$key => $value\n";
}
Дэвид Харкнесс
источник
10
«Объект класса stdClass не может быть преобразован в строку» вполне может быть результатом ошибки, если объект не является массивом.
приземлился
print_r ($ obj); тоже может помочь. Рекурсивно печатает заданные поля объекта.
fandasson 04
9

Для тестирования я использую следующее:

//return assoc array when called from outside the class it will only contain public properties and values 
var_dump(get_object_vars($obj)); 
Дими
источник
2

Иногда вам нужно перечислить переменные объекта, а не для целей отладки. Правильный способ сделать это - использовать get_object_vars ($ object). Он возвращает массив, содержащий все переменные класса и их значения. Затем вы можете просмотреть их в цикле foreach. Если используется внутри самого объекта, просто выполните get_object_vars ($ this)

JG Estiot
источник
1

Вот еще один способ выразить свойство объекта.

foreach ($obj as $key=>$value) {
    echo "$key => $obj[$key]\n";
}
Будове
источник
3
Это работает только в том случае, если объект реализует \ArrayAccessили является объектом array, в противном случае FATAL ERROR Uncaught Error: Cannot use object of type SomeType as array
выдается
0

Перед тем, как запустить $ object через цикл foreach, вы должны преобразовать его в массив:

$array = (array) $object;  

 foreach($array as $key=>$val){
      echo "$key: $val";
      echo "<br>";
 }
Рекс
источник