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

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

PHPz
リリース: 2023-04-24 14:58:59
オリジナル
631 人が閲覧しました

オブジェクト リレーショナル マッピング (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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート