5

静的クラスを作成するときは、熟練度の低いプログラマーが使いすぎる傾向があるため、常に注意するように言われてきました。

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

セッションは静的クラスに含まれるのが理にかなっているように思われます。なぜなら、それらの1つだけが存在するからです。

以前は、セッションオブジェクトを作成した後、インスタンスを保存するファクトリがあるCMSで作業していました。新しいセッションが要求されると(MyFactory :: getSession())、以前に初期化されたセッションが返されます。これには何か利点がありますか?

ありがとう!

4

1 に答える 1

4

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

詳細については、次のプレゼンテーションをご覧ください。

于 2012-08-24T19:54:05.610 に答える