扩展PHP类 - 帮助理解

时间:2016-01-05 23:21:39

标签: php class oop extends

我在理解一个类如何扩展另一个类时遇到了一些麻烦。我有我的模特课。

class model{
    public $db;

    public function __construct(){
        $this->db = $GLOBALS['db']; 
    }

    public function _sel($table, $where="", $order_by="", $limit="", $group_by="",$database = NULL){            
        if($database === NULL) {  $database = $this->db; }
        // Yada Yada Yada
        $results = $database->select($sql);
    }

我有一个分页课来扩展它:

    class pagination extends model {

        public $limit;
        public $page;
        public $criteria;
        private $_totalRecords;
        private $_totalPages;   

        public function __construct(){  

            // Initialize
            $arguments = func_get_args();
            if(!empty($arguments)){
                foreach($arguments[0] as $key => $property){
                    if(property_exists($this, $key)){
                        $this->{$key} = $property;
                    }
                }
            }

        }

        public function getPaginationPage(){
          // Yada Yada Yada
          // This next line causes the issue
          $records = $this->_sel($query['table'],$query['where'],$query['order_by'],$start." , ".$end,$query['group_by'],$query['database']);

为了保持这篇文章的简短,我试图只包含必要的代码部分。我遇到的问题是当我在扩展类中执行查询时失败,因为$ this-> db没有值。因为我在构造函数中设置它,在我看来,我需要再次使用类似$ xx = new model()的东西来调用它,但是因为它只是一个应该已经存在的类的扩展我很困惑为什么它不会已经有了价值。不可否认,我是自学成才,刚开始上课。我对它们的理解是错误的还是我需要做的事情确保它“延伸”?

这也是我调用扩展类的方式:

$this->model->pagination = new pagination(array(
            'limit'     =>  10,
            'page'      =>  1,
            'criteria'  => array('projects','status_id > 0','name ASC',''),         
        ));

1 个答案:

答案 0 :(得分:1)

您已覆盖model课程中的pagination构造函数。只需从 构造函数中调用 构造函数即可保留两者:

class pagination extends model {
    ...

    public function __construct() { 
        parent::__construct();
        ...