我有一个从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
函数时,代码可以毫无问题地运行。
有什么想法吗?
答案 0 :(得分:1)
CI_Model
有自己的__get
函数already defined。
通过覆盖它(并完全改变它的工作方式),你很可能已经破坏了CI中所有希望魔术方法以某种方式工作的东西。 $this->load
可能就是那些破碎过的东西之一。