PHP定义的常量返回undefined


PHP - defined constant returns undefined

我正在做一个CodeIgniter项目,我一直在常量方面遇到一些麻烦。

我的实例模型——扩展了一个通用的MY_Model——定义了它对应的SQL表的一个常量,'instances'。

const DB_TABLE = 'instances';

在其他地方,$instances_model->get_by()被调用,它位于MY_Model中,在instances_model的上下文中引用该常量,该常量应该覆盖MY_Model中的同名常量。Get_by()以:

开头
if(!defined('$this::DB_TABLE')) exit($this->table_not_set_error);

应用程序返回"Instances_model error: table name is not set"并退出。


MY_Model的声明/构造函数:

class MY_Model extends CI_Model {
  const DB_TABLE = 'abstract';
  public $table_not_set_error;
  function __construct() {
    parent::__construct();
    $this->table_not_set_error = get_class($this) . " error: table name is not set.";
  }

get_by:

public function get_by($attribute, $value = null, $include_obsolete=0)
  {
    var_dump(defined('$this::DB_TABLE'));
    var_dump($this::DB_TABLE);
    if(!defined('$this::DB_TABLE')) exit($this->table_not_set_error);

Instances_model:

class Instances_model extends MY_Model
{
  const DB_TABLE = 'instances';
  public function __construct()
  {
    parent::__construct();

get_by()函数中的两个var_dump分别返回false和"instances"。这说不通啊。如果PHP可以返回常量的值,它怎么可能没有被定义呢?它甚至返回正确的上下文:"实例"而不是"抽象"。为什么PHP认为$this::DB_TABLE是未定义的?

谢谢你的帮助。

问题是您正在使用$this访问一个类常量,这不是一个实例常量。你想要的:

if (!defined('self::DB_TABLE')) exit($this->table_not_set_error);

:

var_dump(self::DB_TABLE);

你也可以使用static::而不是self::,如果你想一个子类能够重新定义常量为自己的值。您使用$this->访问属于类的实例对象的东西,但self::static::访问属于类本身的东西,如常量或静态方法或属性。