DataMapper для Codeigniter: возможно ли создать экземпляр объекта модели всего один раз и использовать повторно?
Не пытаясь спамить или рекламировать здесь, я ценю это сообщество и людей, которые с радостью отдают свое время, чтобы ответить на вопросы (как и я). Я создал библиотеку аутентификации для 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 ответ
Да, вы можете передавать объекты в качестве аргументов в 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), когда вам нужен пользователь - если пользователь уже найден, вам не нужно будет снова вызывать БД.