2017-05-11 14 views
0

S.O의 question 여기에, 대답은 PDO 연결을 처리하기 위해 익명 기능과 공장 패턴을 모두 사용하는 것이 좋습니다. 익명의 기능은 다른 데이터베이스에 연결해야 할 경우에 사용되는 것으로 생각됩니다. 다른 기능이 정의 될 것입니다. 이 경우 익명의 함수를 단일 데이터베이스의 팩토리 클래스 자체로 옮기는 것이 좋을까요?PDO 익명의 공장 내부

이것은 심지어 단지 원래의 대답은 즉 다른 연결을 설정, 달성하기 위해 노력했다 달성 생성자에 PDO의 매개 변수를 전달하지 왜이 방법으로, 마음 또한

class StructureFactory 
{ 
    protected $provider = null; 
    protected $connection = null; 

    public function __construct() 
    { 
     $this->provider = function() { 
      $instance = new PDO('mysql:......;charset=utf8', 'username', 'password'); 
      $instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
      return $instance; 
     }; 
    } 

    public function create($name) 
    { 
     if ($this->connection === null) 
     { 
      $this->connection = call_user_func($this->provider); 
     } 
     return new $name($this->connection); 
    } 

} 

에 있었다 무엇인가? 같은

뭔가 : 당신이 의존성 주입에서 어떤 혜택을 것처럼 보이는데 그렇게 때문에

class StructureFactory 
{ 
    protected $provider = null; 
    protected $connection = null; 

    public function __construct($PDO_Params) 
    { 
     $this->provider = function() { 
      $instance = new PDO($PDO_Params["dsn"], $PDO_Params["username"], $PDO_Params["password"]); 
      $instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
      return $instance; 
     }; 
    } 

    public function create($name) 
    { 
     if ($this->connection === null) 
     { 
      $this->connection = call_user_func($this->provider); 
     } 
     return new $name($this->connection); 
    } 

} 
+0

간단히 설명하십시오. 익명의 함수는 요청에 따라 연결하는 데 사용됩니다. 처음으로 호출 할 때 한 번 연결됩니다. –

+0

@ YouCommonSense 그 부분을 이해했지만 해당 익명 함수도 생성자의 일부가 될 수 있습니다. 맞습니까? –

+0

@feetnappy 생성자는 클래스를 단위 테스트 할 수 없으므로 논리를 포함하지 않아야합니다. –

답변

0

번호.

수정할 수있는 방법은 다음과 같습니다. 초기화 된 PDO 인스턴스를이 지연로드 방식을 사용하는 대신 공장에서 직접 삽입합니다. 좀 this answer에 좋아.

나는 또한 this lecture을 보길 권합니다.