2011-08-08 3 views
0

여기에 스팸 또는 광고를하지 않으려 고합니다. 나는이 공동체와 기꺼이 자신의 시간과 같은 질문에 대답 할 시간을 포기한 사람들을 소중히 생각합니다. WolfAuth라는 Codeigniter에 대한 인증 라이브러리를 구축했습니다. 추후 공지가있을 때까지는 현재 모든 데이터베이스 상호 작용을 위해 DataMapper를 사용합니다.CodeMiter 용 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)를 호출 할 수 있습니다 - 사용자가 이미 발견 된 경우, 당신은 다시 DB를 호출 할 필요가 없습니다.

관련 문제