【问题标题】:DataMapper For Codeigniter: Possible To Instantiate Model Object Just Once and Reuse?Codeigniter 的 DataMapper:可以只实例化一次模型对象并重用吗?
【发布时间】:2011-10-22 02:49:04
【问题描述】:

我不想在这里发送垃圾邮件或做广告,我珍视这个社区以及乐于放弃时间回答问题的人们(比如我自己)。我已经为 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 database-design codeigniter codeigniter-datamapper


    【解决方案1】:

    是的,您可以在 php.ini 中将对象作为参数传递。

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多