Проблема преследует меня с ранних дней CodeIgniter, и теперь, с новым CI 3, я хочу посмотреть, есть ли более элегантный способ ее решения.
// file: application/core/MY_Controller.php class MY_Controller extends CI_Controller { public $GLO; function __construct(){ parent::__construct(); $this->GLO['foo'] = 'bar'; $this->GLO['arr'] = array(); } }
то, позже в коде, мне нужно получить и установить значения переменной $ GLO динамически. Так, например:
// file: application/controllers/dispatcher.php class Dispatcher extends MY_Controller { function __construct() { parent::__construct(); $this->load->model('public/langs'); print_r($this->GLO); } }
будет печатать array('foo'=>'bar, 'arr'=>Array())
который является правильным. Также в моих моделях я могу получить значения массива $ GLO таким же образом. Однако, как только мне нужно установить любые значения в массиве $ GLO, я получаю Indirect modification of overloaded property notice
и поэтому я застрял. В моей модели (после выполнения запроса БД):
// file: application/models/public/langs.php class Langs extends CI_Model { function __construct(){ parent::__construct(); } function set_global_languages(){ print_r($this->GLO); // <<< prints the same values as in the controller above $temp = array(); // [stripped db code] $temp['label'] = $row->label; $temp['id'] = $row->id; $this->GLO['arr'][] = $temp; // <<< this is where the notice happens }
Любые подсказки, как я могу использовать $this->GLO['foo'] = 'baz';
для установки свойств этого глобального массива в моих моделях?
Приветствия.