PHP类自动运行方法

时间:2014-02-22 10:47:04

标签: php class oop

我不知道标题是否真正符合我要求的内容,但现在就是这样。我正在尝试构建一个非常基本的分页类,仅用于检索一系列项目。 到目前为止,这是我的班级

<?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方法就显示出来了?

另外,所有计算页数,总项数等的方法都必须从类中自动调用,因此它们实际上设置了变量值,现在的方式只有它们可用但是不会在任何地方运行。

谢谢。

0 个答案:

没有答案