1

假设我有一个类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()()?显然我写的是错误的,但这正是我想要的!那可能吗?

4

2 回答 2

1

如果这是某种形式的工厂,您可以执行以下操作:

class Core
{
    public function getClass()
    {
        return new Library_MyClass();
    }
}

$core = new Core();
$class = $core->getClass();

但是考虑到课程的名称,Core我怀疑您可能在这里违反了一些SOLID 原则

于 2013-08-31T02:12:51.973 回答
0

您可能希望从使用依赖注入中受益(考虑对 PeeHaa 示例进行轻微更新)

class Core
{
    public function getClass($api)
    {
        return new $api();
    }
}

$core = new Core();
$apiInstance = $core->getClass('Library_MyClass');

Core这样,当您希望它为您提供另一个库类的实例时,您就不必更新该类。

于 2013-08-31T17:07:43.740 回答