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()メソッド(getter)を使用して問題を修正しました。

しかし、問題はまだあります。なぜget_object_vars()が機能しないのですか?マニュアルから

答えて

3

:あなたがprotectedとき

アクセス非静的プロパティ

を取得します。

お試しget_class_vars

+0

どちらも機能しませんでした。 – Tool

0

これは、属性の「保護された」可視性のためです。フィールドを「public」に変更すると、それが表示されますか?

+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メソッドをインスタンスから呼び出すことです。 私はすべてのプロパティをパブリックとして設定するのはあまりにも劇的な変更だと思います。 このメソッドでは、プロパティをパブリックに設定せず、クラスデザインを変更しません。