2011-05-10 17 views
2

遅延抽象化メカニズムを使用するデータベース抽象化レイヤを構築したいとします。他のオブジェクトをオブジェクトに置き換えよう

ルートオブジェクトをロードするようにレイヤーに要求すると、その外部表現が読み込まれ、それ自体が構築されます。

次に、リンクされたオブジェクトが存在することを何とか識別します。すべての前払いをロードするのはコストがかかる可能性があるため、関連するオブジェクトの代理を確立しました。そのような代理人は周りを回ることができるはずです。

最初のメッセージがそのようなプロキシで呼び出された場合、その外部表現がロードされ、それ自体が構築されます。プロキシへの参照が渡された可能性があるため、作成されたオブジェクトは既存のプロキシオブジェクトをその場で置き換える必要があります。

PHPでオブジェクトを別のオブジェクトにインプレイスで置き換えることはできますか?

+0

いくつかのコードスニペットの例を挙げてください。 '$ this = new obj'を置き換えることはできませんが、関連するオブジェクトの実際の'& '参照が一度しか適用できないように思えます。しかし、汎用のプロキシ/インターセプトオブジェクトも、複雑さに応じてオプションになります。 – mario

+0

PHPの参考文献は参考文献ではないため、解決策ではないかもしれません。私はおそらく明日コードを追加します。今日は遅すぎる。 – SteAp

答えて

2

私はオブジェクトがそれ自身へのすべての参照を別のオブジェクトに置き換えることは可能ではないと思います。代わりに、プロキシオブジェクトにプロパティアクセスとメソッド呼び出しをoverloadingを使用して転送させます。ベースプロキシオブジェクト(例:OOProxy)にプロキシを実装し、プロキシオブジェクトを遅延ロードするLazyProxyクラスに拡張します。オブジェクトのタイプを調べる必要がない限り、プロキシへの参照を持つものはプロキシと区別することができません。

+0

Thx!はい、実際のオブジェクトのアダプタのようなプロキシを使用するのが標準的な方法です。 – SteAp

+1

常に参照を使用し、新しいものを使用しない限り可能です。それは汚れたハックだと言われているので、実際には避けるべきである。参照:[PHPによるオートバイ](http://bit.ly/eSuuzJ)... – ircmaxell

関連する問題