Эта статья будет иметь более прикладной смысл, чем предыдущие. Мы создадим класс модели, который вы в принципе сможете использовать в своих проектах
Для начала переименуем класс Model в ideal/classes/Model.php
в Registry и файл назовем также ideal/classes/Registry.php
При разработке можете скидывать на этот класс все, что связано с настройками, с запросами, и т.п.
В местах его использования также все переименуем
<?php
class Registry{
private $data = array();
function __construct($data = array()) {
$this->data = $data;
}
function __get($name){
return isset($this->data[$name])?$this->data[$name]:null;
}
function __set($name,$value){
$this->data[$name] = $value;
}
}
в App.php
$this->config = new Registry(array_merge($default_config, $custom_config));
//...
$this->uri = new Registry(Router::gi()->parse($_SERVER['REQUEST_URI']));
и в application/models/user.php
class User extends Registry{
Теперь ничего нам не мешает создать новый класс ideal/classes/Model.php
<?php
class Model{
private $_data = null;
function __construct() {
$this->_data = new stdClass();
}
function __set($name, $value) {
$this->_data->$name = $value;
}
function __get($name) {
return property_exists($this->_data, $name) ? $this->_data->$name : null;
}
}
отличие от Registry пока лишь в том, что мы используем объект место ассоциативного массива.
Теперь при обращении к полю экземпляра такой модели
$model = new Model();
$model->id = 5;
вызывается магический метод __set
и внутреннему объекту $data
в поле $id
записывается нужное значение.
Зачем это делать? - спросите вы