簡體   English   中英

PHP-定義的常量返回未定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM