请教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
这样的调用关系好像就乱了 还是我理解错了;求教!
既然你知道继承顺序是这样:
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方法啊,明白?
谢谢回答。我不是不理解可不可以调用到 只是不确定调用的逻辑是否是对的。
我的观点是在类方法中 子类可以调父类的方法。反过来不行。
现在的情况是 cl_db_driver 这个父类 simple_query 方法调用了子类的_execute方法。 CI_DB_mysql_driver_trans_begin这个子类调用父类 cl_db_driver simple_query 这样的逻辑我觉得是正确的
不知道为什么ci好像没什么规范 父类调子类 子类调父类随意调。
这样我觉得逻辑乱出了问题不好定位。 本帖最后由 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方法,不是他的父类在调用,明白? anydy2008 发表于 2018-6-12 10:58
CI_DB_mysql_driver_trans_begin这个子类调用父类 cl_db_driver simple_query 这样的逻辑我觉得是正 ...
不是CI没什么规范,也不是什么随意调用,是你思维逻辑的问题 动态语言灵活性就是很强,你要是用了 JS,恐怕会更不习惯。
页:
[1]