【问题标题】:PHP - how do I pass args to a class constructor while using variable class name? [duplicate]PHP - 如何在使用变量类名时将 args 传递给类构造函数? [复制]
【发布时间】:2011-12-01 09:55:14
【问题描述】:

可能重复:
Is there a call_user_func() equivalent to create a new class instance?

我这样实例化我的类:

$className = 'varClassName';
$validator = new $className;

但我想将一个数组作为参数传递给类构造函数。我认为以下方法可能有效:

$className = 'varClassName(array('min'=>2, 'max'=50))';
$validator = new $className;

但是,这会导致无法找到该类的错误。那么如何在使用变量类名的同时将 args 传递给类构造函数呢?

【问题讨论】:

  • 如果没有 eval(),这是不可能的。你为什么需要它?有设计缺陷的味道
  • 没有eval() 也是可能的。见下文。但我同意这清楚地表明了设计缺陷。还有一个重要的。

标签: php parameters constructor


【解决方案1】:

看看ReflectionClass。你可以这样做:

$rc = new ReflectionClass("YourClass");
$obj = $rc->newInstanceArgs(array(...));

这可能是最好的方法,但它是 PHP 的一个相当新的补充。另一种方法是使用eval(),但我拒绝编写这样的代码。 ;)

【讨论】:

  • 你是对的。我回答的时候有点懵。我修改了我的答案......也许这会更好。 :)
【解决方案2】:
$className = 'varClassName';
$validator = new $className(array('min'=>2, 'max'=>50));

【讨论】:

  • 我不确定这是否真的是 OP 的要求。但我们会看到
  • 这在 PHP 中甚至是不可能的,我想知道为什么 OP 确实接受了这个作为答案 - 甚至得到了三个支持。 “解析错误:语法错误,意外 '=',期待 ')'” - 这是致命的 - 请参阅:eval.in/3599
  • 对不起,我没有注意到我打错了(在数组定义中,我写了=而不是=>)。现在它起作用了。感谢您的关注。 :)
【解决方案3】:

你这样做:$validator = new $className($array);

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多