我不知道标题是否真正符合我要求的内容,但现在就是这样。我正在尝试构建一个非常基本的分页类,仅用于检索一系列项目。 到目前为止,这是我的班级
<?php
Class Pagination {
private $_dbh;
private $_currentPage;
private $_totalPages;
private $_startLimit;
private $_totalItems;
private $_table = 'products';
private $_perPage = 8;
private $_allowedTables = ['products', 'cart', 'orders'];
public $_results = [];
public function __construct($dbh = null) {
$this->_dbh = ($dbh !== null) ? $dbh : null;
}
public function getResults() {
$this->_results = $this->_dbh->query(" SELECT * FROM $this->_table ORDER BY id DESC LIMIT $this->_startLimit, $this->_perPage ")->fetchAll();
}
public function setCurrentPage($currentPage = null) {
$this->_currentPage = ($currentPage !== null && is_int($currentPage)) ? $currentPage : 1;
}
public function setPerPage($perPage = null) {
$this->_perPage = ($perPage !== null && is_int($perPage)) ? $perPage : $this->_perPage;
}
public function setTable($table = null) {
$this->_table = ($table !== null && in_array($table, $this->_allowedTables)) ? $table : $this->_table;
}
private function totalItems() {
$this->_totalItems = $this->_dbh->query(" SELECT COUNT(id) AS total FROM $this->_table")->fetch()->total;
}
private function totalPages() {
$this->_totalPages = ceil($this->_totalItems / $this->_perPage);
}
private function startLimit() {
$this->_startLimit = ( $this->_currentPage - 1 ) * $this->_perPage;
}
public function getInfo() {
return array(
'table' => $this->_table,
'perPage' => $this->_perPage,
'currentPage' => $this->_currentPage,
'totalItems' => $this->_totalItems,
'totalPages' => $this->_totalPages,
'startLimit' => $this->_startLimit,
'query' => " SELECT * FROM $this->_table ORDER BY id DESC LIMIT $this->_startLimit, $this->_perPage "
);
}
}
?>
这是不完整的,但这就是我想称之为
$pagination = new Pagination($dbh); // $dbh = PDO connection
$pagination->setCurrentPage(2);
$pagination->setTable('products'); // optional
$pagination->setPerPage(12); // optional
$products = $pagination->_results();
问题是我在班级($_currentPage, $_totalPages, $_startLimit and $_totalItems
)顶部定义的所有变量都是空的。
即使我设置它们,它们仍然是空的(如我所料),因此我无法计算$_totalPages
,$_startLimit
,$_totalItems
或调用方法getResults()
将查询数据库中的项目。
第一种方法是在__construct
方法中执行所有操作并且它有效,但我觉得在一个方法中执行太多操作并不好。
所以我的问题是如何修改我的课程,以便我可以使用它,因为我没有调用setter
方法就显示出来了?
另外,所有计算页数,总项数等的方法都必须从类中自动调用,因此它们实际上设置了变量值,现在的方式只有它们可用但是不会在任何地方运行。
谢谢。