3 回答

TA贡献1798条经验 获得超7个赞
首先将类名放入变量中:
$classname=$var.'Class';
$bar=new $classname("xyz");
这通常是您将以Factory模式包装的东西。

TA贡献2011条经验 获得超2个赞
如果您使用命名空间
在我自己的发现中,我认为最好提及您(据我所知)必须声明类的完整名称空间路径。
MyClass.php
namespace com\company\lib;
class MyClass {
}
index.php
namespace com\company\lib;
//Works fine
$i = new MyClass();
$cname = 'MyClass';
//Errors
//$i = new $cname;
//Works fine
$cname = "com\\company\\lib\\".$cname;
$i = new $cname;

TA贡献1797条经验 获得超6个赞
如何也传递动态构造函数参数
如果要将动态构造函数参数传递给该类,则可以使用以下代码:
$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指出这一点。
- 3 回答
- 0 关注
- 1244 浏览
添加回答
举报