数据对象映射模式

概念:把对对象的操作映射为对数据的存储

实例:在实例化用户类的时候把单条数据查询出来赋值给对象属性,然后修改该对象的属性,在程序结束后自动存储已修改过的属性到数据库中

创建用户类(ORM类):User.php

<?php

namespace app;

/**
 * 用户类
 * Class User
 * @package app
 */
class User
{
    // 属性
    public $id;
    public $name;
    public $gender;

    /**
     * 构造方法:查询数据并且赋值给属性
     * User constructor.
     * @param $id
     */
    public function __construct($id)
    {
        // 查询数据库
        $database = new \app\driver\Mysql();
        $database->connect('127.0.0.1', 'root', 'root', 'test');
        $row = $database->query("select * from user where id = {$id}");
        // 把数据赋值给属性
        $this->id = $row['id'];
        $this->name = $row['name'];
        $this->gender = $row['gender'];
    }

    /**
     * 析构方法: 保存已修改过的属性
     */
    public function __destruct()
    {
        // 保存修改的属性
        $database = new \app\driver\Mysql();
        $database->connect('127.0.0.1', 'root', 'root', 'test');
        $row = $database->query("update user set name = '{$this->name}', gender = '{$this->gender}' where id = {$this->id}");
    }

}

开始用映射类:index.php

<?php

// 定义自动注册
spl_autoload_register(function ($class) {
    include $class . '.php';
});

// 映射模式
$user = new \app\User(99);
// 修改属性
$user->name = 'Jack'; $user->gender = 'male';
// 次数程序结束,会自动调用User的析构方法保存数据

目录结构:

扫描二维码关注公众号,回复: 9407156 查看本文章

当然上面只是一种场景,实际运用中还是要根据自己的需要,同时在构造方法和析构方法中还可以把实例化mysql对象进一步优化,比如用注册树模式

猜你喜欢

转载自www.cnblogs.com/waterliang/p/12364539.html
今日推荐