首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >迭代器模式

迭代器模式

作者头像
友儿
发布2022-09-11 11:59:25
发布2022-09-11 11:59:25
3180
举报
文章被收录于专栏:友儿友儿
本次代码符合PHP规范PRS_0
根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)
统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)

index.php 公共部分

代码语言:javascript
复制
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');

Loader.php

代码语言:javascript
复制
<?php

namespace Frame;

class Loader
{
    static function autoload($class)
    {
        require  BASEDIR.'/'.str_replace('\\','/',$class).'.php';
    }
}
迭代器(类继承PHP的Iterator接口,批量操作。)

迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。

相比传统的编程模式,迭代器模式可以隐藏遍历元素的所需操作。

新建AllUser.php类实现PHP的Iterator接口(操作user表)

代码语言:javascript
复制
<?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类文件中添加

代码语言:javascript
复制
<?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中直接调用

代码语言:javascript
复制
<?php
$users = new \Frame\AllUser();

foreach ($users as $user)
{
    echo $user->username,"<br />\n";
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本次代码符合PHP规范PRS_0
  • 根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)
  • 统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)
  • 迭代器(类继承PHP的Iterator接口,批量操作。)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档