PHP定义的常量返回undefined

我正在开发一个CodeIgniter项目,并且在常量上遇到了一些麻烦。PHP定义的常量返回undefined

我的实例模型 - 它扩展了一个通用的MY_Model - 定义了它对应的SQL表“常量”的一个常量。

const DB_TABLE = 'instances'; 

在其他地方,$ instances_model-> get_by()被调用,它生活在MY_Model,引用的是恒定的,应优先于MY_Model同名的不断Instances_model的情况下。 get_by()开始:

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

应用程序返回 “Instances_model错误:表名未设置”,然后退出。


宣言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分别返回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::可以访问属于类本身的东西,如常量或静态方法或属性。

以上是 PHP定义的常量返回undefined 的全部内容, 来源链接: utcz.com/qa/257320.html

回到顶部