PHP - 已定义常量 returns 未定义

PHP - defined constant returns undefined

我正在开发一个 CodeIgniter 项目,但我在使用常量方面遇到了一些麻烦。

我的实例模型 - 它扩展了一个泛型 MY_Model - 定义了其对应的常量 SQL table, '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);

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


Declaration/constructor 共 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_dumps分别为return false和"instances"。这没有意义。如果PHP可以return常量的值,怎么会不定义呢?它甚至是 return 正确的上下文:"instances" 而不是 "abstract"。为什么 PHP 认为 $this::DB_TABLE 未定义?

感谢您的帮助。

问题是您正在使用 $this 访问 class 常量,它不是 实例常量 。你想要:

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

并且:

var_dump(self::DB_TABLE);

如果您希望 child class 能够将常量重新定义为它自己的值,您也可以使用 static:: 而不是 self::。您使用 $this-> 访问属于 class 的 实例 object 的内容,但是 self::static::访问属于 class 本身的东西,例如常量或静态方法或 属性.