我不想在这里发垃圾邮件或做广告,我很重视这个社区和那些愿意花时间回答问题的人(像我一样)。我已经为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!";
}
}
}
我只是在这里非常挑剔,还是我所要求的是可能的,也许是更好的方式来做事情,因为我已经建立了这样一个大的图书馆?
是的,你可以在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