前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >数据对象映射模式

数据对象映射模式

作者头像
友儿
发布2022-09-11 12:02:46
发布2022-09-11 12:02:46
63500
代码可运行
举报
文章被收录于专栏:友儿友儿
运行总次数:0
代码可运行
本次代码符合PHP规范PRS_0
根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)
统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)

index.php 公共部分

代码语言:javascript
代码运行次数:0
运行
复制
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');

Loader.php

代码语言:javascript
代码运行次数:0
运行
复制
<?php

namespace Frame;

class Loader
{
    static function autoload($class)
    {
        require  BASEDIR.'/'.str_replace('\\','/',$class).'.php';
    }
}
数据对象映射模式

创建一个User.php类文件 映射test数据库的user表,对数据表操作

代码语言:javascript
代码运行次数:0
运行
复制
<?php

namespace Frame;

class User
{
    //映射数据库字段
    public $id;//主键ID
    public $class;//班级
    public $grade;//年纪
    public $score;//成绩
    public $username;//姓名

    protected $db;

    public function __construct($id)
    {
        $this->db = new \Frame\Database\Mysqli();
        $this->db->connect('127.0.0.1', 'root', 123456, 'test');
        $res = $this->db->query("SELECT * FROM user WHERE id=$id");
        $data = $res->fetch_assoc();
        $this->id = $data['id'];
        $this->class = $data['class'];
        $this->grade = $data['grade'];
        $this->score = $data['score'];
        $this->username = $data['username'];
    }

    /**
     * 见,对象销毁的顺序,默认情况下,跟其创建的顺序相反;
     */
    public function __destruct()
    {
        $this->db->query("UPDATE user SET username= '{$this->username}',
        class={$this->class},grade={$this->grade},score={$this->score} WHERE id={$this->id}");
        $this->db->close();
    }
}

在index.php中调用

代码语言:javascript
代码运行次数:0
运行
复制
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
$user = new \Frame\User(1);
//var_dump($user->id, $user->username);//读取字段
//更新字段
$user->class = 2;
$user->username = "test";
$user->grade = 3;
$user->score = 99;

数据对象映射模式、工厂模式、注册树模式结合(对数据库中的两个字段修改,) 给工厂类添加一个方法

代码语言:javascript
代码运行次数:0
运行
复制
<?php

namespace Frame;
class Factory
{
    static public function  createDatabase()
    {
       $db = Database::getInstance();
       Register::set('db1', $db);
       return $db;
    }
    //添加的方法
    static public function getUser($id)
    {
        $key = 'user_'.$id;//别名
        $user = Register::get($key);//注册树/注册器
        if (!$user) {
            $user = new User($id);
            Register::set($key, $user);
        }
        return $user;
    }
}

在index.php中调用

代码语言:javascript
代码运行次数:0
运行
复制
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
class Page
{
    public function index()
    {
        //$user = new Frame\User(1);
        $user = Frame\Factory::getUser(1);//工厂模式
        $user->username = "k444";
        //$this->test();//这样写不行,析构函数是反向销毁对象的
    }

    public function test()
    {
        //$user = new Frame\User(1);
        $user = Frame\Factory::getUser(2);//工厂模式
        $user->class = 2;
    }

}
$page = new Page();
$page->index();//修改username
$page->test();//修改class
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本次代码符合PHP规范PRS_0
  • 根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)
  • 统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)
  • 数据对象映射模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档