用户
 找回密码
 入住 CI 中国社区
搜索
楼主: julia
收起左侧

[HELP] 自定义类库载入问题 MY_Model extends CI_Model

  [复制链接]
发表于 2011-8-11 12:02:01 | 显示全部楼层
kunwsk 发表于 2011-8-11 11:59
我提一个新问题呢
我新建了一个application/core/MY_Model.php 内容如下
class MY_Model extends CI_Model

是的,就是这样的,CI 会实例化每一个类,所以会调用两次。
不过这好像没什么大问题。

PS: 有时候确实需要实例化类以后再做其他操作。
 楼主| 发表于 2011-8-11 12:22:12 | 显示全部楼层
本帖最后由 julia 于 2011-8-11 13:10 编辑

修改了文件名为 model2.php,虽然通过调用使用正常,但不符合自定义扩展规则

//在Controller调用某个自定义Model2 中函数l调用
$this->load->library('model2');
$this->model2->my_function();

//存放Location: application/library/Model2.php
class Model2 extends CI_Model //自定义+扩展 通过,但不符合扩展规则
{

    function __construct()
    {
        parent::__construct() ;
               
        }
。。。
}

//自定义无法通过
class Model2
{

    function __construct()
    {
        parent::__construct() ;
               
        }
。。。
}
//扩展无法通过
class MY_Model extends CI_Model //CI_Model
{

    function __construct()
    {
        parent::__construct() ;
 楼主| 发表于 2011-8-11 12:46:06 | 显示全部楼层
本帖最后由 julia 于 2011-8-11 13:59 编辑

是否需要load,根据文件存放位置,例如MY_Model.php 2.0以后版本两种方式

1---------------------Location: application/library/MY_Model.php
创建类库 ----- 规则和调用方式
http://codeigniter.org.cn/user_g ... ting_libraries.html


2 ---------------------Location: application/core/MY_Model.php (事实上model并不在核心列表中,也许是讲错就错)
扩展核心类 ----- 规则和调用方式
http://codeigniter.org.cn/user_guide/general/core_classes.html  这里的核心列表也许漏了model

2种方式均试无效,第一种方式在1.7.2中通过
发表于 2011-8-11 12:53:00 | 显示全部楼层
julia 发表于 2011-8-11 12:46
是否需要load,根据文件存放位置,例如MY_Model.php 2.0以后版本两种方式

1---------------------Location ...

不知道你想实现什么功能呢?
MY_ 是由特殊意义的,不能随意加
 楼主| 发表于 2011-8-11 13:04:39 | 显示全部楼层
Hex 发表于 2011-8-11 12:53
不知道你想实现什么功能呢?
MY_ 是由特殊意义的,不能随意加

我的目的是将通用的model扩展到MY_Model中,方便其它Controller调用。
这个文件以前在1.7.2中使用正常,但在2.0.2中遇到麻烦?
无论我用扩展还是自定义的规则处理,均无法通过。
但我用自定义+扩展语法,却能通过,十分奇怪?
发表于 2011-8-11 13:18:23 | 显示全部楼层
julia 发表于 2011-8-11 13:04
我的目的是将通用的model扩展到MY_Model中,方便其它Controller调用。
这个文件以前在1.7.2中使用正常,但 ...

在 core 下建立 MY_Model,然后 extends CI_Model,
然后在 model 目录下建立普通 model,Xxx_model extends MY_Model
然后在控制器里 $this->load->model('Xxx_model'); $this->Xxx_model->xxx();

按照以上的方式不行?如果不行那就是 CI 的 BUG
 楼主| 发表于 2011-8-11 13:27:44 | 显示全部楼层
Hex 发表于 2011-8-11 13:18
在 core 下建立 MY_Model,然后 extends CI_Model,
然后在 model 目录下建立普通 model,Xxx_model exten ...

试了 N 种方法,
符合规则的 无法通过;
通过的 不符合规则。
想必是CI 的 BUG
发表于 2011-8-11 13:30:45 | 显示全部楼层
本帖最后由 jeongee 于 2011-8-11 13:33 编辑
julia 发表于 2011-8-11 12:46
是否需要load,根据文件存放位置,例如MY_Model.php 2.0以后版本两种方式

1---------------------Location ...

谁说model不属于core的啊,你去看system/core下面是否有Model.php

核心类和普通类的扩展是一样的,只要放对位置就可以了,我扩展过model,并没出现你的这个问题,想必还是用的不得当吧
并且扩展的类的用法与原类用法一样,比如你扩展了表单验证类
MY_Form_validate使用的时候依然是$this->load->library('form_validate');而不是$this->load->library('MY_form_validate');

另,核心类不需要自己load。
 楼主| 发表于 2011-8-11 13:39:10 | 显示全部楼层
本帖最后由 julia 于 2011-8-11 13:40 编辑

可以立即测试上面第12 楼的代码,如果在你的机器上通过,说明我的系统问题???
 楼主| 发表于 2011-8-11 14:00:50 | 显示全部楼层
jeongee 发表于 2011-8-11 13:30
谁说model不属于core的啊,你去看system/core下面是否有Model.php

核心类和普通类的扩展是一样的,只要放 ...

http://codeigniter.org.cn/user_guide/general/core_classes.html 它说得核心列表里没有model

本版积分规则