为什么php动态对象类创建不起作用?

时间:2019-02-26 14:01:28

标签: namespaces factory-pattern php-7.2 zend-expressive dynamic-class-creation

我正尝试在Zend Expressive APP中创建一个类(作为工厂类工作),如下所示:

declare(strict_types=1);

namespace App\Install\Factory;

use App\Install\Model as Models;
use App\Install\Abstracts\AttributeInterface;

class AttributeEntityFactory{

    public static function create($type1 ='Attribute') : AttributeInterface
    {
        $resolvedClass = "Models\\$type1";
        $resolvedClass1 = 'Models\\'.$type1;
        //return new $resolvedClass();
        //return new $resolvedClass1();
        return new Models\Attribute();
    }
}

上面的代码非常适合我。但是,如果尝试使用其他两个return语句中的任何一个,则会显示

  

找不到类'Models \ Attribute'

如何实现动态实例化?

属性类代码如下:

namespace App\Install\Model;
use App\Install\Abstracts\AttributeInterface;

class Attribute implements AttributeInterface
{
    protected $attribute;

    public function setAttribute($attribute)
    {
        $this->attribute = $attribute;
    }

    public function getAttribute()
    {
        return $this->attribute;   
    }  
}

我的PHP版本是:

  

PHP 7.2.13(cli)(内置:2018年12月14日04:20:16)(NTS)

1 个答案:

答案 0 :(得分:0)

您可能需要传递完整的名称空间?

"App\Install\Model\" . $type1;

更多...

您拥有的模型属性位于名称空间App\Install\Model中,而您尝试创建的对象来自Models\\ . $type1

也许您需要将Models更改为Model