2

私はこのようなクラスを持っています:

classPages.php

class pages {

    private $dbh;

    function __construct($dbh) { 
        $this->dbh = $dbh;
    }
    //...
}

classNews.php

class news {

    private $dbh;

    function __construct($dbh) { 
        $this->dbh = $dbh;
    }
    //...
}

classMod.php

class mod {

    private $dbh;

    function __construct($dbh) { 
        $this->dbh = $dbh;
    }
    //...
}

そしてインデックスページで:

try
{
    $dbh = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
}
catch(PDOException $ex)
{
    die("Failed to connect to the database: " . $ex->getMessage());
}

require 'classPages.php';
require 'classNews.php';
require 'classMod.php';

$pages = new pages($dbh);
$news = new news($dbh);
$mod = new mod($dbh);

//use above objects where needed

だから私は単一の PDO オブジェクトを作成します。次に、各クラスのコンストラクターに渡します。次に、これらのオブジェクトを使用して、コンストラクターに渡されたこの pdo オブジェクトを使用してデータのフェッチと挿入を行うメンバー関数を呼び出します。

正しい方法ですか?または、直接的または間接的に競合が発生しますか?

4

1 に答える 1

1

これが正しい方法です。毎回異なる DB 接続を作成する必要はありません。これは最適です (新しい PDO インスタンスがそれを行うかどうかはわかりませんが、少なくとも確認することはできます)。

PDO でステートメントを準備すると、別のインスタンスが作成されるため、競合の心配はありません。考えられる唯一の問題は、あるクラスで PDO インスタンスの属性の一部を変更し、別のクラスで異なる属性を操作することに依存している場合です (ただし、これはほとんどありません)。

オブジェクト指向プログラミングの目標の 1 つは、リソースを再利用することです。

于 2013-01-28T03:31:15.373 に答える