0

dbアクセスを生成する「メインクラス」があります。何かのようなもの:

class ObjetBd extends Objet
{
    protected $bd;
    public function __construct()
    {   
        parent::__construct();
        $this->bd = new BD();
        $this->bd->connect();
    }   
}

これは私にとって「クリーンな」コードです(コンパクトにするためにコメントを削除しました)。

今私の問題は、$this->bdオブジェクトごとに生成されることです。

静的オブジェクトが一度生成+初期化されるかどうか疑問に思います。

connect()静的メソッドへの直接呼び出しを使用せずに、一度呼び出して1つの接続のみを使用したい(つまり、$this->bd以前のように使用し続ける)

その場合、次のコードが問題なく機能するかどうか、および使用するリソースを減らす必要があるかどうかを教えてください。

class ObjetBd extends Objet
{
    static private $bd_static;

    protected $bd;

    public function __construct()
    {   
        parent::__construct();
        if (!isset(self::$bd_static)) {
            self::$bd_static = new BD();
            self::$bd_static->connect();
        }
        $this->bd = self::$bd_static;
    }
}
4

1 に答える 1

0

はい、あなたはこれを正しく行っています。シングルトンコメントは無視してください。シングルトンは避けるのが良いでしょう。

私は提案をしたいのですが:

BDはある種のデータベースだと思います。OOPの力は、動作を変更せずに物事をサブクラス化し、オブジェクトを置き換える機能です。

したがって、コンストラクターで$bdオブジェクトを渡す方がよい場合があります。覚えておくべきことです。これは「依存性注入」または「制御の反転」と呼ばれます。

于 2012-04-25T14:27:12.223 に答える