Vòng qua tất cả các thuộc tính của đối tượng php


84

Làm cách nào tôi có thể lặp lại tất cả các thuộc tính của đối tượng ?. Ngay bây giờ tôi phải viết một dòng mã mới để in từng thuộc tính của đối tượng

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

Tôi có thể lặp qua tất cả các thuộc tính của một đối tượng bằng vòng lặp foreach hoặc bất kỳ vòng lặp nào không?

Một cái gì đó như thế này

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

1
Đi thẳng với foreachvòng lặp mà bạn đang làm đúng
Shakti Singh

6
Sử dụng một foreach(với =>not ->) để lặp qua các thuộc tính public của đối tượng . Bạn cũng có thể làm cho lớp của mình có thể Traversable nếu bạn muốn một hành vi khác.
netcoder

@netcoder: cảm ơn nhưng đó chỉ là lỗi đánh máy
Daric

2
như netcoder đã nói: chỉ các thuộc tính công cộng mới có thể truy cập được
Andreas

Câu trả lời:


139

Nếu điều này chỉ để gỡ lỗi đầu ra, bạn có thể sử dụng phần sau để xem tất cả các loại và giá trị.

var_dump($obj);

Nếu bạn muốn kiểm soát nhiều hơn đầu ra, bạn có thể sử dụng điều này:

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

9
"Đối tượng của lớp stdClass không thể được chuyển đổi thành chuỗi" cũng có thể là một lỗi kết quả nếu đối tượng không phải là một mảng.
hạ cánh

print_r ($ obj); cũng có thể giúp ích. In đệ quy các trường của đối tượng đã cho.
fandasson

8

Đối với mục đích thử nghiệm, tôi sử dụng những thứ sau:

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

1

Đây là một cách khác để thể hiện thuộc tính đối tượng.

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

2
Điều này chỉ hoạt động nếu dụng cụ đối tượng \ArrayAccesshoặc là một array, nếu không sau đây được ném:FATAL ERROR Uncaught Error: Cannot use object of type SomeType as array
NoodleOfDeath

1

Đôi khi, bạn cần liệt kê các biến của một đối tượng chứ không phải cho mục đích gỡ lỗi. Cách đúng để làm điều đó là sử dụng get_object_vars ($ object). Nó trả về một mảng có tất cả các biến lớp và giá trị của chúng. Sau đó, bạn có thể lặp lại chúng trong một vòng lặp foreach. Nếu được sử dụng trong chính đối tượng, chỉ cần thực hiện get_object_vars ($ this)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.