本次代码符合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接口,批量操作。)

  1. 迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。
  2. 相比传统的编程模式,迭代器模式可以隐藏遍历元素的所需操作。

新建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";
}

演示:

15.png

Last modification:September 3, 2022
如果觉得我的文章对你有用,请随意赞赏