2012-12-07 3 views
4

예 없음 :PHP 동적 오리 타이핑 평가

<?php 
class a{ 
    public function func(){ 
     return "a"; 
    } 
} 

class b{ 
    public function func(){ 
     return "b"; 
    } 
} 

$input = "a"; // Would come from user input 

eval('$duck = new '.$input.'();'); 
$duck->func(); // Returns a in this case 

내가 eval()을 사용하지 않고이 작업을 수행 할 수있는 방법이 있나요?

+0

이를 참조하십시오 작동합니다 : http://stackoverflow.com/questions/951373/ 언제나 - eval-evil-in-php –

답변

8

물론 eval()없이 할 수 있습니다. PHP는 new 연산자의 인수로 클래스 이름 또는 리터럴을 포함하는 문자열을 사용합니다.

$duck = new $input; // parentheses are optional 
echo $duck->func(); 
+2

저는 약 1 년 동안 PHP를 코딩 해 왔으며 PHP OOP는 약 한 달 동안 코딩했습니다. 나는 그것이 그렇게 쉽지 않을 것이라고 결코 예상하지 못했습니다. –

1

당신은 예를 들어, 문자열로 클래스 이름을 저장하여 할 수있는 예 :

$input = "a"; 
$duck = new $a(); 
if(is_callable($duck',"func")){ 
    $duck->func(); 
}