开发者社区 问答 正文

难道这是ci的bug吗?报错

14行  $v_data['go_data'] = $this->load->model('position_model')->getdata(14, 9, 0);

15行  $v_data['learn_data'] = $this->load->model('position_model')->getdata(15, 9, 0);


这样写,会报错,说15行


Fatal error: Call to a member function getPositionsDataByPosid() on a non-object XXXXXXXXXXX

ci在这一块是不是有理由改进一下


展开
收起
爱吃鱼的程序员 2020-06-14 22:03:43 478 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    别用这个了,其官方网站声明已经放弃维护了。这个框架的生命周期已经结束了。回复<aclass='referer'target='_blank'>@点击修改个人信息:不用担心,不会放弃的。CI已经找到新东家了,不会放弃维护的。那用什么超出偏移量了,为什么不能报错?回复<aclass='referer'target='_blank'>@我勒个去勒个我:不会是load的问题,CI的load使用的单例模式。报错是non-object,追进去看看不是这个问题,如果我去掉一行就是对的.跟偏移量没有关系,可能不能联系load两次相同的model.ci在这里可能处理有问题印象中,load不是这样用的吧

    用:

    $this->load->model('position_model');

    $this->position_model->getdata(14,9,0);

    不过ci这样处理很不好。需要在控制器注释@propertyPosition_model$position_model,才能找到使用模型方法的地方[findusages].

    我们项目里是给ci加上自动加载Position_model::instance()->getdata(14,9,0);

    来个例子看看逗逼 模型第一次已经被引入过了,第二次引入的时候,系统判断出该模型已经被载入,立刻返回true,所以你第二次引入的时候,得到的结果已经不是对象 而是一个布尔值。。不报错怪了
    很明显这里并没有getPositionsDataByPosid()这个方法,所以应该是model里面报错了,建议把代码贴全。
    回复<aclass='referer'target='_blank'>@还没名字:CI的核心思想是单例模式,所以这里只会load一次,并且只有一个模型实例。回复<aclass='referer'target='_blank'>@faxian:在控制器的构造函数里载入model作为该控制器的属性然后直接引用该属性就避免了这种情况getPositionsDataByPosid()肯定会有的.因为我如果只写一行的时候是正确的.我看了下.在loadmodel的时候,ci有一个判断,如果已经被load了,直接反回了true而不是返回该model对象....这点我觉得ci做得不好

    2020-06-14 22:04:00
    赞同 展开评论
问答地址: