PHP 设计模式 笔记与总结(10)数据对象映射模式 2

时间:2023-02-05 15:43:58

【例2】数据对象映射模式结合【工厂模式】和【注册模式】的使用。

入口文件 index.php:

<?php
define('BASEDIR',__DIR__); //定义根目录常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('\\Common\\Loader::autoload');
echo '<meta http-equiv="content-type" content="text/html;charset=utf8">'; class Page{
function index(){
//使用工厂方法生成对象,而不是直接new
$user = Common\Factory::getUser(1);
$user->name = 'Ozil'; $this->test();
echo 'success';
} function test(){
//对对象属性的操作就完成了对数据库的操作
$user = Common\Factory::getUser(1);
$user->mobile = '13912345678';
$user->regtime = date("Y-m-d H:i:s",time());
}
} $page = new Page();
$page->index();

index() 和 test() 中的 $user 对象为同一个对象。

工厂模式文件 Common\Factory.php

<?php
namespace Common; class Factory{
static function createDatabase(){
$db = Database::getInstance();
//得到数据库对象后,使用注册器模式将该对象映射到全局树上
Register::set('db1',$db);//db1为映射的别名
return $db;
} static function getUser($id){
//注册器模式
$key = 'user_'.$id;
$user = Register::get($key);
if(!$user){
$user = new User($id);
Register::set($key , $user);
}
return $user;
}
}

访问入口文件,就能修改 test 数据库 user 表中 id 为1 的数据。