Куда поместить и как загрузить класс объекта результата в Codeigniter?

Я ищу правильный способ организовать «классы объектов результата» в CodeIgniter. Эти классы обычно используются в моделях, как описано в документации:

Вы также можете передать строку в result(), которая представляет класс для создания экземпляра для каждого объекта результата (примечание: этот класс должен быть загружен)

$query = $this->db->query("SELECT * FROM users;");

foreach ($query->result('User') as $row)
{
   echo $row->name; // call attributes
   echo $row->reverse_name(); // or methods defined on the 'User' class
}

Итак, куда поместить класс «Пользователь» и есть ли «официальный» способ его загрузки?


person sasa    schedule 17.09.2012    source источник


Ответы (2)


Попробуйте использовать библиотеку.

Поместите свой класс в папку application/libraries, затем используйте загрузчик для его загрузки:

$this->load->library('user');
person Silviu G    schedule 17.09.2012
comment
Абсолютно нет, потому что это создаст новый экземпляр пользовательского класса, и я не хочу иметь этот пустой объект в памяти. И, конечно же, классы объектов результатов вовсе не библиотеки. - person sasa; 17.09.2012
comment
Используйте $this-›load file() для загрузки файла php, содержащего ваши классы. - person Silviu G; 17.09.2012

Не совсем то, о чем вы просите, но я часто использую MY_Model с:

public function merge_object(&$object, $data){

    if (is_object($data)) {
        $data = get_object_vars($data);
    }
    if (!empty($data)) {
        foreach ($data as $property => $value) {
            if (!property_exists($object, $property)) {
                $object->$property = $value;
            }
        }
    }
    return $object;
}

а затем вызовите $this->merge_object($this, $data); из __construct($data = array())

Когда вы сейчас вызываете функцию модели, она также возвращает экземпляр класса модели, поэтому вы можете получить доступ к любому из ее методов. По сути, он делает то, что вы пытаетесь сделать.

person jmadsen    schedule 22.09.2012