不能在CodeIgniter中使用__get / __set函数

时间:2018-02-20 01:21:42

标签: php codeigniter-3

我有一个从CI_Model继承的类,如下所示:

<?php
class DBObject extends CI_Model {
    // fields
    public $errorMsg;
    protected $_columnsConfig;
    protected $_tableName;
    // functions
    // constructor
    function __construct() {
        parent::__construct();
        $this->load->database();
    }
    // getter
    public function __get($name) { 
        if (strtolower($name) == "columncount") { 
            return count($this->_columnsConfig);
        } else { 
            $colCfg = null;
            $i = 0;
            while ($i < count($this->_columnsConfig)) { 
                $dbcc = $this->_columnsConfig[$i];
                if (strtolower($name) == strtolower($dbcc->propertyName)) { 
                    $colCfg = $dbcc;
                    break;
                }
                $i++;
            }
            if ($colCfg != null) return $colCfg->storedValue;
            else return null;
        }
    }
    // setter
    function __set($name, $value) { 
        $colCfg = null;
        $i = 0;
        while ($i < count($this->_columnsConfig)) { 
            $dbcc = $this->_columnsConfig[$i];
            if (strtolower($name) == strtolower($dbcc->propertyName)) { 
                $colCfg = $dbcc;
                break;
            }
            $i++;
        }
        if ($colCfg != null) $colCfg->newValue = $value;
    }
}

当我运行我的代码时,我收到一条错误消息:

  

输入:错误

     

消息:在null

上调用成员函数database()      

文件名:C:\ xampp \ htdocs \ hostelry_pms \ application \ models \ DBObject.php

     

行号:11

但是当我评论__get / __set函数时,代码可以毫无问题地运行。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

CI_Model有自己的__get函数already defined

通过覆盖它(并完全改变它的工作方式),你很可能已经破坏了CI中所有希望魔术方法以某种方式工作的东西。 $this->load可能就是那些破碎过的东西之一。