保存从数据库取得的对象
工厂模式,自己随意写一下就算是了,也就是一个mysqli对象而已
把代码粘贴出来
比如Yii2框架的...
Model::batch 和 Model::each 方法
其中返回的对象 BatchQueryResult 就实现了迭代器接口
迭代器就是把不同的数据结构 "相同功能 "的函数装到一个名字相同的函数里, 无论你用的是什么结构(链表/数 组/hash表等),总之你可以不关心任何细节遍历细节, 一些不可见的元素不会展示出来。 另外foreach是简单的 循环语法,但迭代器是一种方法工具, 迭代器可以根据需要自定义读取数据,而foreach是一次性载入数据,从内 存占用上讲迭代器也是更好的一种解决方式,当然具体实现还是要根据业务上的一些考量。
static function createUser($id){
$key='user_'.$id;
$user=Register::get($key);
if(!$user){
$user=new User($id);
Register::set($key,$user);
}
return $user;
}
通过工厂模式这个静态方法来实例化user
请问还有什么不明白的吗
从头到尾敲的话,是否应该加上一些自己的运用呢?
再说了如果从一开始学的话,这段代码就有出现过。
是在析构方法中实现的。
<?php namespace IMooc; class User { //数据库表 public $id; public $name; public $mobile; public $regtime; public $seril_no; protected $data; protected $db; function __construct($id) { /** * 适配器模式-统一接口 * 工厂模式,在一个地方创建对象 * 注册树模式,同一个对象,只创建一次 */ $this->db = \IMooc\Factory::createDBMySQLi(); $this->db->connect('localhost', 'root', '', 'test', 'utf8'); $res = $this->db->query("select * from user where id = {$id} limit 1"); $data = $res->fetch_assoc(); $this->id = $data['id']; $this->name = $data['name']; $this->mobile = $data['mobile']; $this->regtime = $data['regtime']; $this->seril_no = $data['seril_no']; } //析构方法 function __destruct() { $this->db->query("update user set name ='{$this->name}', mobile='{$this->mobile}', regtime='{$this->regtime}', seril_no='{$this->seril_no}' where id = {$this->id} limit 1"); } }
user中这样写,应该可以取出来
http://zhidao.baidu.com/link?url=DVs8U8fIgCDrQR2Z3n9q8rZvkLDsEjYmC7kRcATEEGlTdfNhNDuZ1mU3jRtEDsDwt15z4uBgbex2FU_HMPnafV7foUG8Zak5zcEsb54_5fK
当然不是的,是 user model在析构的时候,执行了sql语句,可以把代码下载下来看一下就晓得