用户
 找回密码
 入住 CI 中国社区
搜索
查看: 225|回复: 6
收起左侧

[模型] 请教CI数据库的继承调用关系

[复制链接]
发表于 2018-6-11 16:44:20 | 显示全部楼层 |阅读模式
请教大神  ci数据库类的继承关系
ci_db_mysql_drive->ci_db->ci_DB_query_builder->cl_db_driver

一般子类是调用父类的方法   比如父类有个insert方法    子类可能封装一个insert方法  或者用另外一个方法去调用这个方法。

但是在ci  变成了父类调用子类   如ci_db_driver->simple_query
调用了    ci_db_mysql_drive->_execute  

这样的调用关系好像就乱了    还是我理解错了;求教!

发表于 2018-6-11 17:37:14 | 显示全部楼层
既然你知道继承顺序是这样:
PHP复制代码
CI_DB_mysql_driver->CI_DB->CI_DB_query_builder->CI_DB_driver
复制代码

simple_query是CI_DB_driver里的方法,但是调用这个方法的实例是CI_DB_mysql_driver,
它调用simple_query方法就是调用了父类CI_DB_driver的simple_query方法啊,
方法里的$this自然指的就是CI_DB_mysqli_driver的实例啊,
所以$this->_execute就调用了自身(也就是CI_DB_mysql_driver)的_execute方法啊,明白?

 楼主| 发表于 2018-6-12 10:55:07 | 显示全部楼层
谢谢回答。我不是不理解可不可以调用到   只是不确定调用的逻辑是否是对的。
我的观点是在类方法中   子类可以调父类的方法。反过来不行。
现在的情况是   cl_db_driver 这个父类   simple_query 方法调用了子类的  _execute  方法。
 楼主| 发表于 2018-6-12 10:58:40 | 显示全部楼层
CI_DB_mysql_driver  _trans_begin  这个子类调用父类 cl_db_driver    simple_query 这样的逻辑我觉得是正确的
不知道为什么  ci好像没什么规范    父类调子类   子类调父类  随意调。
这样我觉得逻辑乱  出了问题不好定位。
发表于 2018-6-12 11:07:57 | 显示全部楼层
本帖最后由 52lin 于 2018-6-12 11:10 编辑
anydy2008 发表于 2018-6-12 10:55
谢谢回答。我不是不理解可不可以调用到   只是不确定调用的逻辑是否是对的。
我的观点是在类方法中   子类 ...

调用的逻辑我上面不是给你说了吗?
CI_DB_mysql_driver 继承 CI_DB_driver
CI_DB_driver有simple_query方法
那CI_DB_mysql_driver 的【实例】就可以调用父类的simple_query方法啊,
在方法simple_query里的$this就是CI_DB_mysql_driver 的【实例】本身,是CI_DB_mysql_driver 的实例在调用_execute方法,不是他的父类在调用,明白?
发表于 2018-6-12 11:10:02 | 显示全部楼层
anydy2008 发表于 2018-6-12 10:58
CI_DB_mysql_driver  _trans_begin  这个子类调用父类 cl_db_driver    simple_query 这样的逻辑我觉得是正 ...

不是CI没什么规范,也不是什么随意调用,是你思维逻辑的问题
发表于 2018-6-12 13:19:45 | 显示全部楼层
动态语言灵活性就是很强,你要是用了 JS,恐怕会更不习惯。

本版积分规则