いいえ、オブジェクト指向プログラミングを行っている場合、クラスは静的であってはなりません。それは工場にも当てはまります。静的ファクトリメソッドパターン(例で示した)は、 SRPに違反しているため、悪い習慣と見なされます。
静的変数は異なる名前のグローバルであり、静的メソッドは名前空間化された関数であり、名前空間はたまたまクラスのように見えます。
同じセッションインスタンスを使用するために複数のオブジェクトが必要な場合は、それらすべてにそれを提供する必要があります。直接または工場を使用して。
class ObjectFactory
{
protected $session;
public function __construct( $session )
{
$this->session = $session;
}
public function create( $name )
{
return new $name( $this->session );
}
}
このファクトリのインスタンスを、セッションを使用する構造を作成する必要がある任意のオブジェクトに渡します。このファクトリを使用してオブジェクトを作成するだけで、それらはすべて同じセッションインスタンスで初期化されます。
より単純化された例では、セッションを各オブジェクトに手動で渡すことができます。
$session = new Session;
$user = new User( $session );
$article = new Document( $session );
$user
これで、インスタンスとインスタンスの両方$article
が同じセッションインスタンスを共有します。
詳細については、次のプレゼンテーションをご覧ください。