ホームページ  >  記事  >  バックエンド開発  >  PHPでオブジェクト永続層を実装する方法

PHPでオブジェクト永続層を実装する方法

PHPz
PHPzオリジナル
2023-04-24 14:45:58527ブラウズ

オブジェクト リレーショナル マッピング (ORM) は、最新のソフトウェア開発において不可欠な設計パターンです。 ORM パターンの中心的な考え方は、プログラム内のオブジェクトをリレーショナル データベース内のテーブルにマップし、それによってプログラムとデータベース間のシームレスな統合を実現することです。 ORM パターンの実装では、Hibernate、Django ORM、Ruby on Rails の Active Record などの既存の ORM フレームワークを利用できます。ただし、PHP では、追加のフレームワークを必要とせずに、ネイティブ PHP コードを使用してオブジェクト永続層を実装できます。この記事では、ネイティブ PHP コードを使用してオブジェクト永続化レイヤーを実装する方法を紹介します。

1. リレーショナル データベースの基本

PHP を使用してオブジェクト永続層を実装する方法を理解する前に、まずリレーショナル データベースのいくつかの基本概念を理解する必要があります。

1. データベース テーブル

リレーショナル データベースは多くのデータ テーブルで構成されます。各データテーブルは 1 つ以上の列で構成されます。各列には、整数、文字列、日付などの対応するデータ型があります。

2. 主キー

各データ テーブルには主キーが必要です。主キーは、テーブル内の各レコードを一意に識別するフィールドです。主キーは一意である必要があり、NULL にすることはできません。

3. 外部キー

外部キーは、2 つ以上のテーブル間の関係を確立するために使用されます。外部キーは、あるテーブルと別のテーブルの間の関連付けを定義し、2 つのテーブルから情報を取得し、結合クエリを通じてそれらをマージできるようにします。

2. PDO を使用してデータベースにアクセスする

PDO (PHP データ オブジェクト) は、PHP でデータベースにアクセスする標準的な方法です。PDO を使用して、さまざまなリレーショナル データベース (MySQL など) にアクセスできます。 、PostgreSQL など)。 PDO を使用してデータベースを操作すると、プログラムの移植性が向上し、プログラムのセキュリティが向上します。

PHP では、PDO クラスを使用してデータベース接続を初期化できます。このうち、ユーザーが指定する必要があるパラメーターには、データベースの種類、ホスト名、データベース名、ユーザー名とパスワードなどが含まれます。初期化後、PDO インスタンスを使用して SQL クエリを実行し、クエリ結果を処理できます。

以下は、PDO を使用して MySQL データベースにアクセスする例です。

<?php
try {
    $dbh = new PDO(&#39;mysql:host=localhost;dbname=test&#39;, $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>

上記のコードを実行すると、MySQL 内の FOO テーブルが選択され、クエリ結果が出力されます。

3. PHP を使用して ORM モードを実装する

ORM モードを実装する場合、PHP オブジェクトとクラスを使用してデータベース内のテーブルと列を記述する必要があります。各テーブルに対応するクラスを定義し、テーブル内の列をクラスの属性に変換する必要があります。 ORM モードを実装するには、データベースを操作し、クエリ結果を PHP クラス オブジェクトに変換するためのデータベース アクセス層を導入する必要もあります。 PHP を使用して ORM モードを実装するための開発手順は次のとおりです:

1. データベース接続 MySQL を作成する

PHP では、PDO を使用して MySQL データベースに接続できます。以下は、MySQL データベース接続を開くためのコード例です。

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
?>

上記のコードでは、MySQL データベースへの接続を作成し、PDO のエラー モードを例外モードに設定します。 PDO を使用する場合、例外モードを使用すると、プログラム内で発生する可能性のあるエラーをより簡単に処理できます。

2. ORM クラスの定義

ORM モードを実装するには、テーブルに対応する ORM クラスを定義し、テーブル内の列をクラスの属性に変換する必要があります。次に、ORM クラスのサンプル コードを示します。

<?php
class User {
    private $id;
    private $name;
    private $email;
    private $password;

    public function __construct($id, $name, $email, $password) {
        $this->id = $id;
        $this->name = $name;
        $this->email = $email;
        $this->password = $password;
    }

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
    }

    public function getEmail() {
        return $this->email;
    }

    public function setEmail($email) {
        $this->email = $email;
    }

    public function getPassword() {
        return $this->password;
    }

    public function setPassword($password) {
        $this->password = $password;
    }
}
?>

上記のコードでは、User クラスを作成し、テーブル内の ID、名前、電子メール、およびパスワードの列をクラスの属性に変換します。また、クラスのコンストラクターと一連のゲッター メソッドとセッター メソッドも定義します。

3. ORM データ アクセス層の実装

ORM モードを実装するには、データベースを操作するためのデータ アクセス層も実装する必要があります。以下は、単純なデータ アクセス層のサンプル コードです。

<?php
class UserDAO {
    private $pdo;

    public function __construct(PDO $pdo) {
        $this->pdo = $pdo;
    }

    public function getUserById($id) {
        $stmt = $this->pdo->prepare('SELECT * FROM user WHERE id = :id');
        $stmt->execute(array('id' => $id));
        $data = $stmt->fetch();
        if ($data) {
            return new User($data['id'], $data['name'], $data['email'], $data['password']);
        }else{
            return null;
        }
    }

    public function saveUser(User $user) {
        if ($user->getId()) {
            // update
            $stmt = $this->pdo->prepare('UPDATE user SET name = :name, email = :email, password = :password WHERE id = :id');
            $stmt->execute(array('name' => $user->getName(), 'email' => $user->getEmail(), 'password' => $user->getPassword(), 'id' => $user->getId()));
        } else {
            // insert
            $stmt = $this->pdo->prepare('INSERT INTO user (name, email, password) VALUES (:name, :email, :password)');
            $stmt->execute(array('name' => $user->getName(), 'email' => $user->getEmail(), 'password' => $user->getPassword()));
            $user->setId($this->pdo->lastInsertId());
        }
    }

    public function deleteUser(User $user) {
        $stmt = $this->pdo->prepare('DELETE FROM user WHERE id = :id');
        $stmt->execute(array('id' => $user->getId()));
    }
}
?>

上記のコードでは、データベースを操作して User オブジェクトを返すために使用される UserDAO クラスを作成しました。このクラスの getUserById メソッドは指定された ID を持つユーザー情報をデータベースから取得し、saveUser メソッドはユーザー情報をデータベースに更新または挿入し、deleteUser メソッドはユーザー情報を削除します。

4. ORM クラスの使用

ORM モードを実装した後は、SQL クエリを手動で記述することなく、ORM オブジェクトを通常のオブジェクトと同様に使用できます。以下は、ORM クラスのサンプル コードです。

<?php
// create a new user
$user = new User(null, &#39;John Doe&#39;, &#39;john@example.com&#39;, &#39;password&#39;);
$userDAO = new UserDAO($pdo);
$userDAO->saveUser($user);

// find a user by id
$user = $userDAO->getUserById(1);

// update a user's name
$user->setName('Jane Doe');
$userDAO->saveUser($user);

// delete a user
$userDAO->deleteUser($user);
?>

上記のコードでは、新しいユーザーを作成し、そのユーザーをデータベースに挿入します。次に、getUserById メソッドを使用して、ID 1 のユーザー情報を検索します。 setter メソッドを使用してユーザー名を更新し、saveUser メソッドを使用して変更をデータベースに保存できます。最後に、deleteUser メソッドを使用してユーザーを削除します。

結論

この記事では、PHP を使用してオブジェクト永続化レイヤー パターンを実装する方法を紹介しました。まず、リレーショナル データベースの基本を学び、次に PHP がデータベースに接続するために PDO を使用する方法を詳しく調べました。リレーショナル データベースと PDO の接続方法を理解することで、ORM モードを自分で手動で実装できます。 ORM クラスとデータ アクセス レイヤーを定義することで、データベース操作を PHP コードにシームレスに統合できます。 ORM モードを使用すると、コードが大幅に簡素化され、データベース操作がより便利になります。

以上がPHPでオブジェクト永続層を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。