2012-12-07 30 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/ when-is-eval-evil-in-php –

回答

8

當然,你可以不用eval()。 PHP將使用包含類名稱的字符串或文字作爲new運算符的參數。

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

我一直在編寫PHP近一年的時間,並且PHP OOP已經有一個月了。我從來沒有想到它會那麼容易。 –

1

是的,你可以通過存儲類名到一個字符串,例如:

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

會工作