Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用相同的函数名加载多个codeigniter模型是否会导致覆盖?_Codeigniter_Models - Fatal编程技术网

使用相同的函数名加载多个codeigniter模型是否会导致覆盖?

使用相同的函数名加载多个codeigniter模型是否会导致覆盖?,codeigniter,models,Codeigniter,Models,如果在控制器的构造函数中,我加载两个不同的模型,例如 $this->load->model('Pens_model'); $this->load->model('Pencils_model'); 其中每个模型都扩展了MY_模型,MY_模型有以下概要 class MY_Model extends Model { protected static $tablename = ""; protected static $title = ""; protected static

如果在控制器的构造函数中,我加载两个不同的模型,例如

$this->load->model('Pens_model');
$this->load->model('Pencils_model');
其中每个模型都扩展了MY_模型,MY_模型有以下概要

class MY_Model extends Model
{

protected static $tablename = "";
protected static $title = "";
protected static $idattribute = 'id';
    ...
    ...
    function getTableName(){
    return self::$tablename;
}
}
pens模型有:

class Pens_model extends My_model {

    function Pens_model(){
        parent::MY_Model();
        self::$tablename = "pens";
        self::$title = 'Pens';
    }
        ...
}
Pencils模型有一个类似的构造函数,表名为“Pencils”

现在控制器的索引函数具有以下内容:

echo $this->Pens_model->getTableName()."\n";
echo $this->Pencils_model->getTableName()."\n";
我观察到的是,最后加载的模型的表名(本例中为铅笔)被打印两次,就好像表名和函数被覆盖一样。 这是CI缺陷/限制还是我的实现中的错误

php版本=5.3


static::
引用是在PHP5.3中引入的,用于解决后期静态绑定的问题(它解析为在运行时调用的静态类),但
self::
仍然引用父类,因为对self的静态调用将在编译时解析。

在我看来,它类似于后期静态绑定。。。什么是php版本?我想我理解你的解释-但是有没有一个干净的解决方案呢?(我的_模型中有一些通用函数,它们依赖于$tablename和$title)。php版本>=5.3是否修复了此问题?谢谢。升级到5.3.3,但这似乎仍然不起作用。似乎有效的方法是将变量声明为“const tablename=”“”。并将其称为static::tablename。这是php向后兼容吗?我的错。。关于php的版本,我的解释有点误导和错误。。请阅读编辑后的答案…感谢您的澄清,更多详情请访问。为了我的项目,我只是将字段切换为常量。