2014-04-21 2 views

답변

0

사용 "홈"불행하게도 나는이 오류가 발생합니다. 그래도 작동하지 않으면 변수에 저장 한 다음 new $var을 호출하십시오. 클래스의 이름이 괄호없이 단독으로 표시되어야합니다 selClass 내부에 지정하는 것이

class Home { 
    public function run(){ 
    return 'hello world'; 
    } 
} 

class Foo { 
    public function selClass(){ 
    return 'Home'; 
    } 
} 


$foo = new Foo(); 
$barClass = $foo->selClass(); 
$bar = new $barClass; 

echo $bar->run(); // hello world 

주 및 $barClass 후 괄호는 선택적입니다 :이 같은 뭔가를 찾고있는 것처럼

4

는 소리가 난다. 귀하의 예를 다음

+0

어쨌든 요점은 무엇입니까? 왜 새 집을 돌려주지 않는 거지? 맞지? –

+0

@TOOTSKI 귀하의 의견을 이해할 수 있는지 확실하지 않습니다. 질문은 약간 불분명하지만 OP는 그 이름을 가진 클래스를 만드는 법을 알고 싶어합니다. 아마 이것은 단지 샘플 코드 일뿐입니다. –

+0

'Home()'이 유효한 클래스 이름이 아니며 'new $ barClass();'는 인수가 없기 때문에'new $ barClass;'로 쓸 수 있어야합니다. –

9

, 여기 용 : 당신은 당신의 코드에서 이것을 사용하는 경우

$bar = new ${!${''}=substr($foo->selClass(), 0, -2)}; 

, 당신은 구글에서 작업을 할 수 있습니다.

+2

문자열을 완전히 새로운 레벨로 바꾸는 것은 – leon

+0

@leon입니다. newInstanceArgs (func_get_args()); }' –

+0

나는 당신의 반성 접근법에 동의한다. 200 % - 나는'Home()'에서'Home'을 추출하기 위해 문자열을 파싱하는 것이 스트레치라고 생각했다. OP가 메서드를 조정 한 다음 실제 문자열 구문 분석없이 제안을 사용하는 것처럼 보입니다. – leon

관련 문제