【问题标题】:PHP Dynamic Duck Typing Without Eval没有 Eval 的 PHP 动态 Duck 类型
【发布时间】:2012-12-07 16:13:41
【问题描述】:

例子:

<?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() 的情况下做到这一点?

【问题讨论】:

标签: php eval duck-typing


【解决方案1】:

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

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

【讨论】:

  • 我已经编写 PHP 快一年了,PHP OOP 大约一个月了。我没想到会这么容易。
【解决方案2】:

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

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

会工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-23
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多