クラスAのインスタンスは、たとえばクラスBから、他のいくつかのオブジェクトをインスタンス化します。
$foo = new B();
B内のメソッドからAのパブリッククラス変数にアクセスしたいと思います。
何かが足りない場合を除いて、これを行う唯一の方法は、現在のオブジェクトをBのインスタンスに渡すことです。
$foo = new B($this);
これはベストプラクティスですか、それともこれを行う別の方法がありますか?
それは私には問題ないように見えます。これは簡単に理解できる解決策です。
「A」が 1 つしかない場合は、レジストリ パターンの使用を検討できます。たとえば、http://www.phppatterns.com/docs/design/the_registryを参照してください。
最初に、間違ったパターンを使用していないかどうかを確認します。アプリケーション ロジックから、B は本当に A について知っている必要がありますか? B が A について知る必要がある場合、親子関係は十分ではないようです。たとえば、A が子である場合や、A のロジックの一部が、階層内で B の「下」にある (つまり、B を認識していない) 3 番目のオブジェクトに移動する場合があります。
つまり、B に A をデータ ソースとして登録するメソッドを用意するか、A に B をオブザーバーとして登録するメソッドを作成し、A がB に値の変更を通知するために使用するマッチング メソッドを作成することをお勧めします。
Paul が言ったことと同様に、A が 1 つしかない場合は、それをシングルトンとして実装できます。その後、A のインスタンスを引数としてコンストラクター (集約) に渡すか、setter メソッド (本質的には集約) を使用するか、この関係をコンストラクター (構成) で直接設定することができます。
ただし、シングルトンは強力ですが、コンポジションで実装する場合は注意してください。そのようにしてコンストラクターの引数を取り除くことができると考えるのは良いことですが、コードを書き直さないと A を別のものに置き換えることもできなくなります。個人的には、シングルトンを使用していても、集約に固執します
$foo = new B( A::getInstance() );