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 本身的东西,例如常量或静态方法或 属性.
我正在开发一个 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 本身的东西,例如常量或静态方法或 属性.