DataMapper для Codeigniter: можно создать экземпляр объекта модели только один раз и использовать повторно? - PullRequest
0 голосов
/ 08 августа 2011

Не пытаясь спамить или рекламировать здесь, я ценю это сообщество и людей, которые с радостью отдают свое время, чтобы ответить на вопросы (как и я).Я создал библиотеку аутентификации для Codeigniter под названием WolfAuth.В настоящее время он использует DataMapper для всего взаимодействия с базой данных, до дальнейшего уведомления.

Каждая функция в настоящее время использует код в соответствии со следующими строками.

$u = new User;
$u->get_by_id($user_id);

if ( $u->exists() )
{  
    // Do user stuff here  
}

Я не совсем уверен, как PHP обрабатываетсоздание объекта, но, безусловно, выполнение этого в 50 функциях и более не может быть полезным для производительности, а если нет, добавляет ненужное создание объекта.Возможно ли иметь глобальную реализацию каждого объекта модели DataMapper, который я использую и повторно использую в каждой функции?

Так что-то вроде следующего.

class Someclass {

    protected $user;
    protected $group;
    protected $roles;

    public function __construct()
    {
        $this->user  = new User;
        $this->group = new Group;
    }

    public function the_user($user_id)
    {
        $user = $this->user->get_by_id($user_id);

        if ( $user->exists() )
        {
            echo "The user exists!";
        } 
    }

}

Я просто чрезвычайнопридирчиво, или то, что я спрашиваю, возможно и возможно лучший способ сделать вещи для такой большой библиотеки, как я построил?

1 Ответ

1 голос
/ 20 сентября 2011

Да, вы можете передавать объекты в качестве аргументов в php.

class Someclass {

protected $user;
protected $group;
protected $roles;

public function __construct()
{
    $this->user  = new User();
    $this->group = new Group();
}

public function get_user($user_id)
{
    if (empty($this->user->id))
    {
        $user = $this->user->get_by_id($user_id);
    }
    else
    {
        $user = $this->user;
    }
    if ( $user->exists() )
    {
        prove_user_exists($user);
        return $user;
    }
    else
    {
        show_error('No User Found');
    }
}

public function prove_user_exists($user)
{
    log_message('info', $user->id);
}

Затем вы можете просто вызвать get_user ($ user_id), когда вам нужен пользователь - если пользователь уже найден, вам не нужно будет снова вызывать БД.

...