ホームページ >バックエンド開発 >PHPチュートリアル >OOP 原則は PDO を使用した PHP でのデータベース接続処理をどのように改善できるでしょうか?
PDO 接続による OOP を理解する
オブジェクト指向プログラミング (OOP) は、ソフトウェア設計に構造化されたアプローチを提供し、現実世界のエンティティを次のようにモデル化します。オブジェクト。 PHP の PDO (PDO) を使用したデータベース接続のコンテキストでは、OOP の正しい使用法を理解することが重要です。
複数のクラスがあるデータベース接続シナリオを考えてみましょう。データベース接続を処理する Database クラスと User クラスです。データベース上で操作を実行します。与えられたものを分析しましょうコード:
Database.php:
class Database { private $conn; private $dsn = 'mysql:dbname=test;host=127.0.0.1'; private $user = 'root'; private $password = ''; public function __construct() { $this->conn = new PDO($this->dsn, $this->user, $this->password); return $this->conn; } }
ユーザー。 php:
include "database.php"; class User { private $conn; public function __construct() { $this->conn = new Database(); } public function login() { $stmt = $this->conn->prepare("SELECT username, usermail FROM user"); // Rest of the code... } }
App.php:
$user = new User(); $list = $user->login(); // Rest of the code...
エラー望ましい動作:
このコードを実行すると、prepare() がデータベースの未定義メソッドであることを示すエラーが発生します。
適切な実装:
これを修正するには、次の手順に従う必要がありますガイドライン:
更新されましたコード:
database.php:
// Define database connection parameters $host = '127.0.0.1'; $db = 'test'; $user = 'root'; $pass = ''; $charset = 'utf8'; // Create a PDO connection $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $opt = [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, \PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new \PDO($dsn, $user, $pass, $opt);
U ser.php:
class User { private $conn; public function __construct(\PDO $pdo) { $this->conn = $pdo; } public function getUsers() { return $this->conn->query("SELECT username, usermail FROM user")->fetchAll(); } }
App.php:
include 'database.php'; $user = new User($pdo); $list = $user->getUsers(); // Rest of the code...
これコードは、database.php を通じてデータベース接続を確立し、接続インスタンスを User クラスのコンストラクターに渡します。ユーザーは、$conn に保存されている PDO オブジェクトを使用してクエリを実行できます。
利点:
このアプローチには、元の実装に比べて多くの利点があります:
以上がOOP 原則は PDO を使用した PHP でのデータベース接続処理をどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。