从PHP中的变量实例化一个类?

我知道这个问题听起来很模糊,因此我将通过一个示例来使其更加清楚:


$var = 'bar';

$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');

这就是我要做的。你会怎么做?我当然可以这样使用eval():


$var = 'bar';

eval('$bar = new '.$var.'Class(\'var for __construct()\');');

但是我宁愿远离eval()。没有eval(),有没有办法做到这一点?


慕码人8056858
浏览 1242回答 3
3回答

元芳怎么了

首先将类名放入变量中:$classname=$var.'Class';$bar=new $classname("xyz");这通常是您将以Factory模式包装的东西。

森林海

如果您使用命名空间在我自己的发现中,我认为最好提及您(据我所知)必须声明类的完整名称空间路径。MyClass.phpnamespace com\company\lib;class MyClass {}index.phpnamespace com\company\lib;//Works fine$i = new MyClass();$cname = 'MyClass';//Errors//$i = new $cname;//Works fine$cname = "com\\company\\lib\\".$cname;$i = new $cname;

互换的青春

如何也传递动态构造函数参数如果要将动态构造函数参数传递给该类,则可以使用以下代码:$reflectionClass = new ReflectionClass($className);$module = $reflectionClass->newInstanceArgs($arrayOfConstructorParameters);有关动态类和参数的更多信息PHP> = 5.6从PHP 5.6开始,您可以使用Argument Unpacking进一步简化此操作:// The "..." is part of the language and indicates an argument array to unpack.$module = new $className(...$arrayOfConstructorParameters);感谢DisgruntledGoat指出这一点。
打开App,查看更多内容
随时随地看视频慕课网APP