2012-08-28 4 views
0

오케이, 이것은 오랫동안 제 개인적인 버그였습니다. 수업이 있다고 해.PHP 5.3 변수를 먼저 설정하지 않고 클래스를 동적으로 인스턴스화하기

class One { 
    public $class = 'Two'; 
    public $member = 'member'; 
} 

class Two { 
    public $member = 'Hey there'; 

    function __construct() { 
     print 'Created'; 
    } 
} 

$one = new One(); 

// case 1: works 
$two_class = $one->class; 
$two = new $two_class(); 

// case 2: fails 
$two = new {$one->class}(); 

이름을 변수에 먼저 할당하지 않고 클래스 구성원으로부터 클래스를 인스턴스화하는 방법이 있습니까? 나는 속성에서 클래스를 동적으로 생성하려고 할 때마다 조금씩 죽습니다. 먼저 변수를 채워야합니다. 누구나 기술적으로 왜 이렇게 작동하지 않는지 설명 할 수 있습니까?

print $two->{$one->method} 

행복하게 '안녕하세요?'라고 인쇄 하시겠습니까?

+0

기술적 될 경우 당신이 필요하지 않은 경우 같은 일이 일어날 것()의 새 클래스를 시작합니다. 또한 변수 $ new_one = $ one-> class에 할당 해보십시오. $ two = new $ new_one(); – wesside

+0

나는 항상 이와 같은 일을하도록 당신을 낙담시킬 것입니다. 단순히 주어진 클래스에 그것이 가지고 있다고 생각하는 기능이 있는지 확실하지 않기 때문에 ... 그것은 유지 보수 공포입니다! 함수처럼 GetMeMyClass ($ input) {switch ($ input) {case 'One': return new One();과 같은 문자열의 값을 기반으로 객체를 만드는 함수를 만듭니다. case 'Two': 새로운 Two()를 반환합니다. 기본값 : die ("GetMeMyClass에 잘못된 수업이 있습니다"); }} – bkwint

+0

@wes, 그건 내 질문 이었어. – thepearson

답변

9
$two = new $one->class(); 

데모 : http://codepad.org/64iCiWn2

그러나 $one->class() 기능의 경우 넌 큰 문제를 얻을 - 그것은 혼란 스러울 수 있지만, $two_class 기능을

+0

정말 대단합니다. 감사. – thepearson