codeigniter — определенная константа возвращает 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();

Два var_dumps в функции get_by () возвращают false и «instance», соответственно. Это не имеет смысла. Если PHP может вернуть значение константы, как его нельзя определить? Он даже возвращает правильный контекст: «экземпляры» вместо «абстрактные». Почему PHP считает $ this :: DB_TABLE неопределенным?

Спасибо за вашу помощь.

1

Решение

Проблема в том, что вы используете $this получить доступ к константе класса, которая не является константа экземпляра. Ты хочешь:

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

А также:

var_dump(self::DB_TABLE);

Вы также можете использовать static:: скорее, чем self:: если вы хотите, чтобы дочерний класс мог переопределять константу к ее собственному значению. Ты используешь $this-> чтобы получить доступ к вещам, которые принадлежат экземпляр объекта класса но, self:: или же static:: чтобы получить доступ к вещам, которые принадлежат самому классу, таким как константа или статический метод или свойство.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]