anydy2008 发表于 2018-6-11 16:44:20

请教CI数据库的继承调用关系

请教大神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

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

52lin 发表于 2018-6-11 17:37:14

既然你知道继承顺序是这样:
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方法啊,明白?

anydy2008 发表于 2018-6-12 10:55:07

谢谢回答。我不是不理解可不可以调用到   只是不确定调用的逻辑是否是对的。
我的观点是在类方法中   子类可以调父类的方法。反过来不行。
现在的情况是   cl_db_driver 这个父类   simple_query 方法调用了子类的_execute方法。

anydy2008 发表于 2018-6-12 10:58:40

CI_DB_mysql_driver_trans_begin这个子类调用父类 cl_db_driver    simple_query 这样的逻辑我觉得是正确的
不知道为什么ci好像没什么规范    父类调子类   子类调父类随意调。
这样我觉得逻辑乱出了问题不好定位。

52lin 发表于 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方法,不是他的父类在调用,明白?

52lin 发表于 2018-6-12 11:10:02

anydy2008 发表于 2018-6-12 10:58
CI_DB_mysql_driver_trans_begin这个子类调用父类 cl_db_driver    simple_query 这样的逻辑我觉得是正 ...

不是CI没什么规范,也不是什么随意调用,是你思维逻辑的问题

Hex 发表于 2018-6-12 13:19:45

动态语言灵活性就是很强,你要是用了 JS,恐怕会更不习惯。
页: [1]
查看完整版本: 请教CI数据库的继承调用关系