实例化PHP类的方法较短

时间:2013-08-31 01:59:54

标签: php class

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

2 个答案:

答案 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类。