2013-08-31 2 views
1

나는 초기화 클래스에 따라 다른 클래스의 인스턴스를 제공하는 클래스 Core()이 있다고 가정 해 보겠습니다. 그것을 시작한 후에, 나는 어떤 수업을 듣고 그 다음 그것을 실연하기를 원한다. 이것은 내가하는 일입니다.짧은 인스턴스화 PHP 클래스

$core = new Core(); 
// $core is further initiated 
$api = $core->getClass(); // This returns, for instance class Library_MyClass 
$class = new $api(); 

마지막 두 단계를 하나로 결합하는 방법이 있습니까? 예를 들어 $class = new $core->getClass()()과 같은 것을 말하고 싶습니까? 분명히 내가 쓴 것은 잘못이지만, 그것은 내가 원하는 것입니다! 그게 가능하니? 난 당신이 여기에 몇 가지 SOLID principles을 위반 될 수 있습니다 의심

class Core 
{ 
    public function getClass() 
    { 
     return new Library_MyClass(); 
    } 
} 

$core = new Core(); 
$class = $core->getClass(); 

그러나 클래스 Core의 이름을 고려 :

+0

일반적으로 클래스 안에는 클래스가 없습니다. 내가 생각하기에 그들을 분리시켜야한다. –

답변

1

이 당신이 뭔가를 할 수있는 공장의 형태 인 경우.

+0

예,'getLibraryInstance()'와 같아야합니다. – Starx

+0

'Core'라는 이름이 그 예입니다. 나는 다른 이름을 가지고있다. 당신의 솔루션에 대한 문제는 클래스에 초기화 (즉'new $ class ($ param1, ...)')를주고 싶고 어떤 클래스를 사용 하느냐에 따라 매개 변수를 전달할 수도 있고하지 않을 수도 있습니다. , 나는 오히려 나의'Core' 만 클래스 이름을 반환하고 나중에 나 자신을 인스턴스화한다는 것을 알았다. – Kousha

+0

SOLID 원칙은 Microsoft HQ에서 얻을 수있는 동기 부여가되는 포스터에서와 비슷하게 들립니다. 당신이 할 수있는 것을 실험하는 것은 프로그래밍에서 재미를 보는 것 (실제로는 더 많은 것)입니다. 특히 오픈 소스 : 새로운 트릭 -> 새로운 기능. 게다가, 나는 포스터가 무엇을하고 싶은지에 대한 아이디어를 가지고 있다고 생각한다. 아마 PHP 클래스 파일을 로딩하기위한 모든 것을 잡을 수있을 것이다. – Jason

0

당신은 (PeeHaa 예에 적용되는 약간의 업데이 트를 고려) dependency injection의 사용의 혜택을 할 수 있습니다

class Core 
{ 
    public function getClass($api) 
    { 
     return new $api(); 
    } 
} 

$core = new Core(); 
$apiInstance = $core->getClass('Library_MyClass'); 

가 제공하는 데 싶습니다 때마다 당신이 Core 클래스를 업데이트 할 필요가 없습니다이 방법 다른 라이브러리 클래스의 인스턴스로.