Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中创建分页类_Php_Oop_Pagination - Fatal编程技术网

在PHP中创建分页类

在PHP中创建分页类,php,oop,pagination,Php,Oop,Pagination,我想构建一个paginator类,但我不确定最好的方法是什么。我在网上看到许多不同的代码,这让我很困惑 我的数据存储在MySQL数据库中。我是否必须给我的pagniator类一个查询,以便它可以为我从MySQL中检索数据(当然,之后它会自动进行一些分页计算)?或者首先从模型获取所有数据,然后将从该模型返回的数组提供给分页器类 无论采用哪种方式,我都可能需要执行另一个查询来获取记录的“总计”数量,并将结果作为单独的参数传递给pagninator类 一旦我知道如何开始,那么我就知道如何收拾剩下的东西

我想构建一个
paginator
类,但我不确定最好的方法是什么。我在网上看到许多不同的代码,这让我很困惑

我的数据存储在MySQL数据库中。我是否必须给我的pagniator类一个查询,以便它可以为我从MySQL中检索数据(当然,之后它会自动进行一些分页计算)?或者首先从
模型
获取所有数据,然后将从该模型返回的
数组
提供给
分页器

无论采用哪种方式,我都可能需要执行另一个查询来获取记录的“总计”数量,并将结果作为单独的参数传递给
pagninator

一旦我知道如何开始,那么我就知道如何收拾剩下的东西。我只是不知道如何将数据传递到
分页器
类以及什么样的数据


你知道如何构建一个好的
分页器
类吗?

一个设计良好的OO
分页器
类应该独立于数据和数据库

它应该采用像
count
page
per_page
这样的参数,并且应该将可用于依赖项注入的对象返回到模型中,以生成具有适当
限制的查询,或者返回到
分页帮助器
类中,以呈现适当的HTML

好的Paginator接口示例(本文给出了10分钟的思考):

通过扩展基础模型,然后让应用程序模型扩展PaginatorModel而不是model,可以集成到模型中的示例:

class PaginationModel extends Model {
    public function query($sql, iPaginatorPage $page = null) {
        if (!empty($page)) {
            $start = $page->getStart();
            $length = $page->getCount();
            $sql .= " LIMIT ({$start}, {$length})";
            return parent::query($sql);
        }
    }
}

一个设计良好的OO
Paginator
类应该独立于您的数据和数据库

它应该采用像
count
page
per_page
这样的参数,并且应该将可用于依赖项注入的对象返回到模型中,以生成具有适当
限制的查询,或者返回到
分页帮助器
类中,以呈现适当的HTML

好的Paginator接口示例(本文给出了10分钟的思考):

通过扩展基础模型,然后让应用程序模型扩展PaginatorModel而不是model,可以集成到模型中的示例:

class PaginationModel extends Model {
    public function query($sql, iPaginatorPage $page = null) {
        if (!empty($page)) {
            $start = $page->getStart();
            $length = $page->getCount();
            $sql .= " LIMIT ({$start}, {$length})";
            return parent::query($sql);
        }
    }
}

创建类,并具有如下功能:

  • 函数结果集($required\u filters,$table,$pagenum,$records){ $getCount='SELECT count(*)from table'; $sql=“从“$table.”LIMIT.($pagenum-1)*$records.“,”$records中选择“$required fields.”; $sqlres=。。。 返回数组($getCount,$sqlres);}

    将此函数调用为list($rescount,$arrData)=resultset(all 参数)

  • 对于分页,使用一些for循环来显示页码…对于总计$rescount页,
    使用get,您可以突出显示当前pagenum

    创建类,并具有如下功能:

  • 函数结果集($required\u filters,$table,$pagenum,$records){ $getCount='SELECT count(*)from table'; $sql=“从“$table.”LIMIT.($pagenum-1)*$records.“,”$records中选择“$required fields.”; $sqlres=。。。 返回数组($getCount,$sqlres);}

    将此函数调用为list($rescount,$arrData)=resultset(all 参数)

  • 对于分页,使用一些for循环来显示页码…对于总计$rescount页,
    使用get可以突出显示当前pagenum

    检查Pear的实现。这是一个非常好的类,使用简单,有很多很酷的特性。

    检查Pear的实现。这是一个非常好的类,使用简单,并且有很多很酷的特性。

    可能与之相关,@Cobra\u Fast:know
    mysql.*
    正在被弃用,不应该再使用
    我是否先从模型中获取所有数据
    不,你应该只拉出需要显示的行,不要在每个页面视图上都占据整个表格…@Vivendi-您对我的答案有任何问题或反馈吗?我花了相当多的时间为你整理。可能与之相关,@Cobra\u Fast发布的链接:知道
    mysql\u*
    正在被弃用,不应该再使用
    我是否首先从模型中获取所有数据
    不,你应该只拉出需要显示的行,不要在每个页面视图上都占据整个表格…@Vivendi-您对我的答案有任何问题或反馈吗?我花了相当多的时间为你整理。做了一些调整。我现在对此比较满意。谢谢,这给了我一个很好的开始方法。但有一件事我无法从你的代码中理解。我不知道如何让分页类知道总共有多少条记录?知道什么是好方法吗?@Vivendi-_构造()中的$total_count参数标识总共有多少条记录。进行了一些调整。我现在对此比较满意。谢谢,这给了我一个很好的开始方法。但有一件事我无法从你的代码中理解。我不知道如何让分页类知道总共有多少条记录?知道什么是好方法吗?@Vivendi-_construct()中的$total_count参数标识总共有多少条记录。