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