本次代码符合PHP规范PRS_0,根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)
index.php 公共部分
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
Loader.php
<?php
namespace Frame;
class Loader
{
static function autoload($class)
{
require BASEDIR.'/'.str_replace('\\','/',$class).'.php';
}
}
迭代器(类继承PHP的Iterator接口,批量操作。)
- 迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。
- 相比传统的编程模式,迭代器模式可以隐藏遍历元素的所需操作。
新建AllUser.php类实现PHP的Iterator接口(操作user表)
<?php
namespace Frame;
class AllUser implements \Iterator
{
protected $ids;//主键集合
protected $data = array();
protected $index;//当前位置
function __construct()
{
$db = Factory::getDatabase();
$result = $db->query("select id from user");
$this->ids = $result->fetch_all(MYSQLI_ASSOC);
}
//返回当前元素
function current()
{
$id = $this->ids[$this->index]['id'];
return Factory::getUser($id);
}
//向前移动到下一个元素
function next()
{
$this->index ++;
}
/**
* 是否有数据
* @return bool
*/
function valid()
{
return $this->index < count($this->ids);
}
/**
* 开头 返回到迭代器的第一个元素
*/
function rewind()
{
$this->index = 0;
}
//返回当前元素的键
function key()
{
return $this->index;
}
}
在Factory.php类文件中添加
<?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;
}
static public function getDatabase()
{
$db = new \Frame\Database\Mysqli();
$db->connect('127.0.0.1', 'root', 123456, 'test');
return $db;
}
}
在index.php中直接调用
<?php
$users = new \Frame\AllUser();
foreach ($users as $user)
{
echo $user->username,"<br />\n";
}
One comment
迭代器模式
1.迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象
的内部元素.
3.相比于传统的编程模式,迭代器模式可以隐藏遍历元素的所需的
操作.