[英]PHP - defined constant returns undefined
我正在研究CodeIgniter項目,並且在常量方面遇到了一些麻煩。
我的實例模型-擴展了通用MY_Model-定義了其對應的SQL表“實例”的常量。
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錯誤:未設置表名”並退出。
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::
訪問屬於類本身的對象,例如常量或靜態方法或屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.