假设我有一个类Core()
,它会根据一些初始化给我不同类的实例。假设在启动它之后,我得到了一些类,然后想要实例化它。这就是我的工作:
$core = new Core();
// $core is further initiated
$api = $core->getClass(); // This returns, for instance class Library_MyClass
$class = new $api();
有没有办法将最后两个步骤合二为一?例如,我说$class = new $core->getClass()()
之类的东西?显然我写的是错的,但这就是我想要的!这可能吗?
答案 0 :(得分:1)
如果这是某种形式的工厂,你可以这样做:
class Core
{
public function getClass()
{
return new Library_MyClass();
}
}
$core = new Core();
$class = $core->getClass();
但是考虑到班级Core
的名称,我怀疑你可能在这里违反了一些SOLID principles。
答案 1 :(得分:0)
您可能希望受益于dependency injection的使用(考虑应用于PeeHaa示例的轻微更新)
class Core
{
public function getClass($api)
{
return new $api();
}
}
$core = new Core();
$apiInstance = $core->getClass('Library_MyClass');
这样,只要您希望它为您提供另一个库类的实例,就不必更新Core
类。