Должна ли эта функция быть на уровне экземпляра или на уровне класса? ... и как заставить его работать в codeigniter - PullRequest
0 голосов
/ 18 ноября 2009

В моем проекте codeigniter у меня есть

<?php
class User_model extends Model {
    function user_model()
    {
        parent::Model();
    }

    // should we use instance method?
    function get_total_users_count(){
        $results = $this->db->query("SELECT * FROM bhr_users GROUP BY userid");
        if($results){
            return $results->num_rows();
        }
        return 0;
    }

    // or class method?
    public static function get_total_users_count(){
        $obj =& get_instance();
        $results = $obj->db->query("SELECT * FROM bhr_users GROUP BY userid");
        if($results){
            return $results->num_rows();
        }
        return 0;
    }
}
?>

Мне кажется, что это должен быть метод уровня класса, потому что он работает с несколькими пользователями. Ты согласен? get_instance является правильным способом сделать это в codeigniter?

Ответы [ 3 ]

1 голос
/ 19 ноября 2009

Честно говоря, я не думаю, что есть один правильный путь для этого. Я бы сказал, что метод экземпляра является наиболее распространенным, но это не значит, что он правильный или неправильный.

Одно большое отличие CodeIgniter от некоторых других фреймворков заключается в том, что модели могут быть такими, какими вы хотите их видеть. Согласно руководству CI «Модель представляет ваши структуры данных». Это говорит о том, что модели «обычно» взаимодействуют с вашей базой данных.

Мне нравится свободное определение, которое CodeIgniter использует для моделей, потому что оно позволяет мне создавать модели для работы с любым набором данных. Хотите использовать RSS-канал в качестве источника данных? Вы можете использовать модель для этого. Хотите получить данные из веб-сервиса? Вы можете использовать модель для этого. У вас есть свобода определять, как вы используете модели.

Я бы сказал, что самая важная вещь - последовательность. Выберите один метод и используйте его последовательно на протяжении всего проекта. Если вы работаете с другими разработчиками над проектом, может быть лучше использовать методы экземпляра. Таким образом, они не запутаются в том, что происходит, сравнив рабочий код на вашем сайте с документацией CodeIgniter. Это, конечно, зависит от уровня квалификации разработчиков, с которыми вы работаете.

1 голос
/ 20 ноября 2009

Чтобы ответить на ваш вопрос напрямую - вызов функции get_instance () - это правильный способ сделать то, что вы пытаетесь сделать из статической функции.

0 голосов
/ 18 ноября 2009

Вы должны использовать

$results = $this->db->query("SELECT * FROM bhr_users GROUP BY userid");

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...