【例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 = CommonFactory::getUser(1); $user->name = 'Ozil'; $this->test(); echo 'success'; } function test(){ //对对象属性的操作就完成了对数据库的操作 $user = CommonFactory::getUser(1); $user->mobile = '13912345678'; $user->regtime = date("Y-m-d H:i:s",time()); } } $page = new Page(); $page->index();
index() 和 test() 中的 $user 对象为同一个对象。
工厂模式文件 CommonFactory.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 的数据。