2012-08-24 9 views
5

私は静的クラスを作成するときは、それほど熟練していないプログラマーによって過度に使用される傾向があるので、常に注意するように言われてきました。私のセッションクラスは静的であるべきですか?

私は現在、サイト上のユーザーを追跡するためにPHPでセッションクラスを作成しています。

セッションは静的なクラスになっているのが理にかなっているようですが、そのうちの1つになるのは正しいでしょうか?

セッションオブジェクトを作成した後、新しいセッション(MyFactory :: getSession())が要求されたときに以前に初期化されたものを返すようなファクトリを持つCMSで作業していました。これに利点はありますか?

ありがとうございます!

+1

いいえ、 'MyFactory ::のgetSession()'あまり意味があり、はい、使用していません静的なクラスは問題ありません。 – Ryan

+0

私はあなたがとても傾けられていれば、あなたは複数のセッションをジャグリングできると思います。 –

+0

なぜ複数のセッションが必要ですか? – Undefined

答えて

4

いいえ、クラスはではありません。は、オブジェクト指向プログラミングを実行している場合は静的である必要があります。それは工場にも当てはまります。この例で示したStaticファクトリメソッドパターンは、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インスタンスは現在同じセッション・インスタンスを共有します。詳細については

、見て次のプレゼンテーション:

関連する問題