不试图在这里发送垃圾邮件或做广告,我非常重视这个社区以及那些乐于放弃回答问题的人(比如我自己)。我为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!";
}
}
}
我只是在这里非常挑剔,或者我正在问的可能是什么,也许是为我这样建造的大型图书馆做更好的方式?
答案 0 :(得分: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) - 如果已找到用户,则不必再次调用db。