我一直在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);
}
}
然后,我创建了一个模型来管理数据库中的语言,代码如下。从内部Language_model如果我回应$this->table
我会得到"Language_model",这就是我想要的。但是代码在运行" $this->db->field_data($this->table)
"的父项中出错,因为表名无效("MY_Model"无效)。由于错误,代码甚至从未在子级中执行var_dump。为什么"$this->db->field_data($this->table)
"不是也使用"Language_model"作为$this->table?
的值运行 PHP 5.3.9
class Language_model extends MY_Model {
function __construct()
{
parent::__construct();
var_dump($this->fields);
}
}
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"是否存在。并且要小心,可能是名称区分大小写并可能产生故障。
最好有错误代码。检查您的日志。var_dump在 $this-> 字段 = ...