4

例子:

<?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()

4

2 回答 2

8

当然你可以不用eval(). PHP 将使用包含类名的字符串或文字作为new运算符的参数。

$duck = new $input; // parentheses are optional
echo $duck->func();
于 2012-12-07T06:47:13.967 回答
1

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

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

会工作

于 2012-12-07T06:47:24.543 回答