具体的には、Yiiフレームワークを使用しており、__setメソッドをオーバーライドしてモデルを作成しています。オーバーライドによって設定されたクラスプロパティを検査する方法__set
しかし、xdebugを使用してモデルクラスのインスタンスを検査すると、これらのプロパティは表示されません。
どうすればそれらを検査できますか?
具体的には、Yiiフレームワークを使用しており、__setメソッドをオーバーライドしてモデルを作成しています。オーバーライドによって設定されたクラスプロパティを検査する方法__set
しかし、xdebugを使用してモデルクラスのインスタンスを検査すると、これらのプロパティは表示されません。
どうすればそれらを検査できますか?
のYiiのマジック__get
/__set
オーバーライドは、不透明なゲッター/セッターメソッド(この場合に検査することは全く何もなくてもよい)、又は行動のいずれかを介して実施することができるコンポーネントのプロパティのためのワンストップショップであることを意味しています。コンポーネントにアタッチされたビヘイビアはCComponent::$_m
プライベート変数に格納されるため、この場合はYiiのようにする必要があります。$_m
にドリルダウンし、そのプロパティを実装する動作(存在する場合)を確認します。
リストされているxdebug変数には、ローカル変数とその子以外は含まれていません。これを行うには、モデルプロパティを調べるためにコードを編集する必要があると私は考えていますか?モデルコード – SystemicPlural
に一時的または永続的にプロパティを追加する方が簡単だと思います。申し訳ありませんが、xdebugはクラス変数も表示します。ただ$ thisを展開してください!しかし、静的なプロパティの場合は、すぐにリリースされるXdebug 2.2-dev(githubから)が必要です。 – Derick
私はYii forumでこれも尋ねました。
ルークによる有用な提案は、変数の監視を設定することです。
Yiiがゲッターとセッターを使用している場合は、プロパティがプライベートか保護されていることを意味します。すべてのxdebugがprint_r
の素晴らしいバージョンだとすれば、どちらかが表示されるとは思わない(保護されたプロパティについて間違っている可能性があると思う)。 Yiiプロパティがプライベートである場合、xdebugはプロパティ名の知識も持っていないので、名前でプロパティを取得することはできません(getterメソッドをトリガする)。
簡単なテストでは、(あなたが読みやすいし、それをしたい場合は、それについて<pre>
を使用して)画面にしますprint_rまたはオブジェクト全体のvardumpを行うことを可能とプロパティが表示され、どのされていない見るであろう。 xedebugが表示しているのと同じものが表示されている場合は、xedebugがオブジェクトのプロパティを取得するために使用する手段を使用して取得できないためです。
すべてのプロパティを見ることができますが、私はまだ正しいトラックにいるかもしれませんが、実際の原因を推測することはできません。
Xdebugは* all *プロパティを表示します。パブリック、プライベート、および保護された。 – Derick
CActiveRecordの場合、属性メンバーに設定されます。興味のあるクラスの親クラスの実装を確認してください。
オブジェクトを画面に印刷するだけで表示できますか? – Anthony
@Anthony確かに - 私は明示的にプロパティを参照する場合。それは私の質問に答えるのにどのように役立つのですか? – SystemicPlural
まあ、それは私の質問ではありませんでした。私はあなたが完全なオブジェクト変数のprint_rを実行してプロパティを見ることができるかどうかを知りたいです。プロパティがセッターを介して設定されている場合、プロパティを明示的に参照すると、getterで取得されます。つまり、プロパティに直接アクセスすることはできません(プライベートか保護されているか)。 xdebugは値が表示されないため、xdebugに値を表示することはできません。私が正しいとすれば、それがあなたの質問に答えるのに役立ちます。 – Anthony