1

我一直在 CodeIgniter 框架中做一些 PHP。我创建了自己的模型类,它扩展并覆盖了默认的代码点火器。就在下面:

<?php
class MY_Model extends CI_Model
{
    public $table;
    public function __construct()
    {
        parent::__construct();
        $this->table = get_class($this);
        $this->fields = $this->db->field_data($this->table);
    }
}

然后我制作了一个模型来管理数据库中的语言,代码如下。如果我回显,则从$this->tableLanguage_model 中得到“Language_model”,这就是我想要的。$this->db->field_data($this->table)但是由于表名无效(“MY_Model”无效),父运行“”中的代码错误。由于错误,该代码甚至从未在孩子中执行 var_dump 。为什么 " $this->db->field_data($this->table)" 也不使用 "Language_model" 作为$this->table? Running PHP 5.3.9的值

class Language_model extends MY_Model {
    function __construct()
    {
        parent::__construct();
        var_dump($this->fields);
    }
}
4

1 回答 1

0

get_class 有一个特殊的行为:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class TestBase extends CI_Controller{
    public function nameWthis(){
        return get_class($this);
    }
    public function nameWOthis(){
        return get_class();
    }
}



class Test extends TestBase{
    public function index()
    {
        echo $this->nameWthis();
        echo '<br/>';
        echo $this->nameWOthis();
    }
}

将输出

Test
TestBase

使用不带参数的 get_class() 会产生静态分辨率,这可能是您的问题。get_class($this) 应该像您预期的那样工作,动态返回当前类名。

添加代码以检查“Language_model”是否存在。并且要小心,可能名称是区分大小写的并且会产生失败。

最好有错误代码。检查您的日志。在 $this->fields = ... 之前放置一个 var_dump(table)

于 2012-05-15T16:26:22.617 回答