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 に答える