コードスニペットは、千の言葉の価値があります明示的に参照をメンバー変数に渡すか、またはの反映を使用しますか?のアクセス所有するオブジェクトは、
答えて
ここでは反射は役に立ちません。
とにかくリクエストは意味をなさない。 Bar::getFoo()
の実装が実装されていると仮定します。次のような状況では、何を返すべきですか?
Bar
オブジェクトは、任意Foo
オブジェクト外に作成される:$bar = new Bar(); $bar->getFoo(); // ??
Bar
オブジェクトがFoo
オブジェクトによって作成され、それは別のFoo
オブジェクトにリンクされている:$foo1 = new Foo(); $foo2 = new Foo(); $foo2->copyBar($foo1); class Foo { // ... public function copyBar(Foo $foo) { $this->bar = $foo->bar; } }
あなたの問題に対する唯一の正しい解決策は、それがBar
オブジェクトのコンストラクタにFoo
オブジェクトを渡すとBar
オブジェクトが作成Foo
オブジェクトへの後方参照を保つようにすることです(と所有している):
class Foo {
private $bar;
public function __construct() {
$this->bar = new Bar($this);
}
}
class Bar {
private $foo;
public function __construct(Foo $foo) {
$this->foo = $foo;
}
public function getFoo() {
return $this->foo; // of course
}
}
の埋め込みドキュメントから所有するドキュメントにアクセスすることです。これは私がこれまで使ってきた解決策ですが、これを行うことができるかどうかは疑問でした。明示的に参照を渡す*。手作業であることに加えて、所有するオブジェクトがメンバ変数オブジェクト( '$ foo-> bar')に簡単にアクセスすることができますが、逆の言語構造はありませんでした。 –
これを明示的に行うと、 、それはより読みやすく、 "型安全"です(PHPが型安全にできる程度です...) –
- 1. DDD内のオブジェクトの所有者へのアクセスを制限する
- 2. Djangoのオブジェクト所有者
- 3. C#でIDisposableオブジェクトの共有所有者
- 4. SQL Serverのオブジェクト所有者とは
- 5. PHP - 別のオブジェクトが所有する不確実な番号オブジェクト
- 6. Task.Run()他のスレッドが所有するオブジェクトを渡す方法は?
- 7. PythonのアクセスC共有オブジェクト
- 8. Pythonマルチプロセッシングでの親の所有オブジェクト
- 9. 2人の所有者を持つオブジェクト
- 10. C++でのオブジェクト所有(MVCパターン)
- 11. oracleの別の所有者に対する関数へのアクセス?
- 12. PostgreSQL:別のユーザが所有するテーブルへのアクセス
- 13. ファイル所有者のアクセス許可を確認する
- 14. 存在するかどうか:1つのオブジェクトが所有するスマートポインタがアクセスを許可する
- 15. ここでは、ファイルのアクセス権の所有権
- 16. メモリリークの下位オブジェクトの '所有者'を近似する方法
- 17. .NETランタイムにクラス(オブジェクト)のインスタンスの所有者を変更する
- 18. SalesforceのOpportunityオブジェクトの所有者を変更する
- 19. オブジェクトの所有者のスキーマに関する質問
- 20. 他のスレッドが所有しているため、呼び出しスレッドはこのオブジェクトにアクセスできません。
- 21. レールにユーザ所有のオブジェクトを結合する
- 22. io.openで所有者とアクセス権を設定する
- 23. Google C++スタイルガイドでオブジェクト所有者とは何ですか?
- 24. ファイルの所有者であるオブジェクトのawakeFromNibの処理
- 25. プログラムで作成されたフライアウトの所有者にアクセスする方法は?
- 26. .NETのCOMオブジェクトの「所有権」を解放します
- 27. 所有および未所有関係
- 28. コールバックを持つ別のオブジェクトが所有するオブジェクトを、削除するオブジェクトから削除できますか?
- 29. std :: recursive_mutexで使用される所有者カウンターにアクセス
- 30. CommandParameterを所有オブジェクトのプロパティにバインドします。
いいえ、クリーンな方法はありません。技術的には、$ this-> bar = new Bar($ this);を実行することができます。しかし、複数のレベル(それらのうちの1つは "コンストラクターで新しい"を持っています)でひどい考えです。 –
'$ baz = $ this-> bar' - 今何? 「所有するオブジェクト」のようなものはありません。 – deceze
@decezeなぜそれが私たちのように許可しないように、hermetmetを作成されます。 あなたはそれが必要な理由は何ですか?これは悪い習慣です。もしそのデータにアクセスしたいのであれば、$ barの値を返す 'protected function getBar():Bar'が必要です。 – timiTao