[英]Establishing PHP PDO DB Connections
我是在PHP中使用PDO的新手,在回顧了一些示例代碼之后,我想知道如何最好地有效地處理數據庫連接。
我在dbconnector.php中建立了以下連接。 回聲只是測試代碼:
try {
$db = new PDO("mysql:host=$servername;dbname=$dbname", $appusername, $apppassword);
// Set the PDO error mode to exception
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected Successfully";
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
在每個類中利用此代碼的最佳方法是什么,這樣我就不會陷入將其復制到每個需要獲取數據的函數中的麻煩? 我考慮過擴展PDO並根據需要創建一個db對象,但是我讀了一些似乎不鼓勵這樣做的帖子和文章,因為PDO已經是面向對象的。
我考慮過擴展PDO
這是一個完全可以理解的菜鳥錯誤。 但是,這(至少)違反了SOLID的兩個規則: SRP和LSP 。
單一職責原則 :通過擴展PDO
您的新類現在可以將數據訪問與新類打算執行的操作耦合在一起。
Liskov替換原則 :通過擴展PDO
您還聲明了新類一個更大的PDO
版本,但不是。 任何為PDO
鍵入提示的function foo(PDO $pdo)
( function foo(PDO $pdo)
)都將接受您的新類作為參數-實際上,不應接受。
我認為也可以為開閉原則辯護-但這給您足夠的思考空間。
對於類來說,使用該數據庫的輸出而不是將整個數據庫連接注入類可能更有意義。 也就是說,不要強迫新類使用數據庫連接,而只是將所需的數據傳遞給該類。 這是最簡單的實現。
就是說,有充分的理由需要將數據庫連接注入到一個類中。 但是,應該使用依賴項注入來完成此操作。 這是一個簡單的示例:
class Foo
{
public function __construct(PDO $pdo){
$this->PDO = $pdo;
}
public function doTheThing(){
$this->PDO->query(/* do whatever */);
// ...
}
}
$pdo = new PDO(/* whatever */);
$foo = new Foo($pdo);
這樣,您可以基於自定義構建的PDO
實例實例化新類,並使用不同的PDO
對象訪問不同的數據庫。
如果您需要進一步,可以創建一個“數據訪問”接口,創建實現它的對象,並為該接口鍵入提示。 但是,僅注入PDO
實例是朝正確方向邁出的美好的第一步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.