2011-09-15 5 views
3

이 줄을 반환get_object_vars는 NULL

object(Penny\HomeBundle\Entity\Department)[1420] 
    protected 'id' => int 37 
    protected 'name' => string 'Support' (length=7) 
    protected 'email' => string '[email protected]' (length=25) 

나는 내가

array 
    empty 
을 얻을

var_dump(get_object_vars($data['department'])); 

을하려고개체가있는 경우 왜 이런 일이 발생하는지 잘 모르겠습니다.

편집 : $ obj-> getValue() 메소드 (getters)를 사용하여 문제점을 수정했습니다.

하지만 여전히 문제가 있습니다. get_object_vars()가 작동하지 않는 이유는 무엇입니까? 매뉴얼에서

답변

3

:

접근 비 정적 속성

당신이 protected입니다

를 가져옵니다.

시도 get_class_vars

+0

작동하지 않았습니다. – Tool

0

이것은 속성의 "보호 된"가시성 때문입니다. 필드를 "공개"로 변경하면 해당 필드가 표시됩니까?

+0

나는 클래스를 생성하지 않았기 때문에 내가 그렇게해야한다고 생각하지 않는다. (Doctrine 2가했다.) 하지만 대중에게 공개하면 효과가 있다고 생각합니다. – Tool

+0

해결책을 찾았 기 때문에 기쁩니다. 그럼에도 불구하고 이것이 작동하지 않는 이유에 대한 설명이어야합니다. – Johannes

0

변수가 보호되어 있기 때문입니다. get_object_vars는 액세스 가능한 변수 만 볼 수 있습니다.

http://php.net/get_object_vars

1

get_object_vars은 객체의 공용 속성을 얻을 참조하십시오. 보호 된 속성 만 있기 때문에 아무 것도 반환되지 않습니다.

보호를 받으려면 클래스를 확장하고이 클래스의 메소드에서 get_object_vars를 실행하십시오.

0

실제로, 기능은 공용 속성을 반환합니다. 이 문제를 해결하는 가장 현명한 방법은 클래스에서 get_object_vars를 반환하고 인스턴스에서 호출하는 public 메서드를 사용하는 것입니다. 모든 속성을 공용으로 설정하는 것이 너무 과감한 변화라고 생각합니다. 이 방법을 사용하면 속성을 public으로 설정하지 않고 클래스 디자인을 그대로 유지합니다.