没有评估的PHP动态鸭子打字

时间:2012-12-07 06:45:22

标签: php eval duck-typing

示例:

<?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()的情况下执行此操作?

2 个答案:

答案 0 :(得分:8)

当然,你可以在没有eval()的情况下完成。 PHP将把包含类名的字符串或文字作为new运算符的参数。

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

答案 1 :(得分:1)

是的,您可以将类名存储到字符串中,例如:

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

会起作用