1

以前は、データベースに接続する必要があるすべてのクラスで Db 接続クラスを拡張していました。これが最も一般的な方法だと思います。ただし、この方法に従うと、db 接続クラスを拡張するすべてのクラス インスタンスで新しい接続を開いたり閉じたりします。最近、pdo オブジェクトを作成してクラスのコンストラクターに渡すことができると考えました。したがって、データベースへのアクセスが必要なすべてのクラス インスタンスは、同じ接続を使用します。それは機能しますが、これが効率的な方法であるかどうかはわかりません。また、スクリプトの最後で呼び出される closeCon という関数があり、null を介して接続を閉じて設定を解除します。それについてもご意見を伺いたいです。前もって感謝します : )

方法 1: 新しいクラスは dbConnection クラスを拡張します。

class Db {

    public $pdo;

    public function __construct($usr, $pwd, $db) {

        $this->pdo = new PDO("mysql:host=localhost;dbname=".$db.";charset=utf8", $usr, $pwd);
    }
}

class Users extends Db{

    public function __construct(){

        parent::__construct($usr, $pwd, $db);
    }
}

方法 2: PDO dbConnection 変数を新しいクラスのコンストラクターに渡して、db に接続します。

class Db {

    public $pdo;

    public function __construct($usr, $pwd, $db) {

        $this->pdo = new PDO("mysql:host=localhost;dbname=".$db.";charset=utf8", $usr, $pwd);
    }

    public function closeCon(){

        $this->pdo = null;
        unset($this->pdo);
    }
}

class Users {

    protected $pdo;

    public function __construct($con){

        $this->pdo = $con;
    }
}

$db = new Db($usr, $pwd, $db);

$posts = new Users($db->pdo);

$db->closeCon();
4

3 に答える 3

1

DB クラスからアプリケーション クラスを拡張しても意味がありません。だから - プランB.

于 2013-08-14T19:37:38.137 に答える
1

方法 1受け入れられる唯一のケースUsersは、モデルの場合です。ただし、このアプローチは、結合、複数の継承の制限などにより、通常は悪い習慣です。また、あなたの場合、複数のデータベース接続が作成されます。

方法 2 は、この 2 つのうちより優れたアプローチです。これは依存性注入の一種です。

于 2013-08-14T19:40:39.473 に答える