객체 PHP의 모든 속성을 반복


84

개체의 모든 속성을 어떻게 반복 할 수 있습니까?. 지금은 객체의 각 속성을 인쇄하기 위해 새로운 코드 라인을 작성해야합니다.

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

foreach 루프 또는 루프를 사용하여 객체의 모든 속성을 반복 할 수 있습니까?

이 같은

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

1
foreach당신이 옳은 일을하고 있는 루프로 머리를 돌리십시오
Shakti Singh

6
객체 공용 속성 을 반복 하려면 foreach( =>not ->)을 사용 합니다. 다른 동작을 원한다면 클래스를 Traversable로 만들 수도 있습니다.
netcoder

@netcoder : 오타 뿐이었다 감사하지만
Daric

2
netcoder가 말했듯이 : 공용 속성 만 액세스 할 수 있습니다
Andreas

답변:


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)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.