Цикл перегляду всіх властивостей об'єкта php


84

Як я можу прокрутити всі властивості об'єкта ?. Зараз я повинен написати новий рядок коду, щоб надрукувати кожну властивість об’єкта

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

Чи можу я прокрутити всі властивості об'єкта, використовуючи цикл foreach або будь-який цикл?

Щось на зразок цього

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

1
Йди головою з foreachпетлею, що робиш правильно
Шакті Сінгх

6
Використовуйте foreach=>не ->) для ітерації загальнодоступних властивостей об’єкта . Ви також можете зробити свій клас прохідним, якщо хочете іншої поведінки.
netcoder

@netcoder: дякую, але це була лише друкарська помилка
Даріч

2
як сказав netcoder: будуть доступні лише загальнодоступні об'єкти
Андреас,

Відповіді:


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)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.