PHP中的动态对象创建

时间:2016-10-18 13:05:47

标签: php object constructor

我使用'model'目录中的一些核心文件和模型制作了自定义框架。现在我只在我需要它时才从模型中创建对象并且这样可行。但我想自动从所有模型类创建对象。例如,'models'目录中有三个模型类,

//-----------[ ObjectOneModel.php ]-------------------
class ObjectOneModel
{
}
//-----------[ ObjectTwoModel.php ]-------------------
class ObjectTwoModel
{
}
//-----------[ ObjectThreeModel.php ]-------------------
class ObjectThreeModel
{
}

和一个主控制器

class Controller 
{
    public function __construct()
    { 
        $files  = scandir('models/');
        foreach ($files as $file)
        {
            if (preg_match('/^[A-Z]{1}[A-Za-z]*Model.php/', $file))
            {
                $object_name    = str_replace('Model.php', '', $file);
                $class_name     = str_replace('.php', '', $file);
                $this->{$object_name} = new $class_name();
            }
        }
    }
}

这很好但是例如ObjectThreeModel需要访问ObjectOne,因为来自ObjectOne的数据在ObjectThreeModel中使用。我想我会在那里创建新对象

//-----------[ ObjectThreeModel.php ]-------------------
class ObjectThreeModel
{
    public function __construct()
    {
        $ObjectOne = new ObjectOneModel();
    }
}

但我认为这是一个丑陋的解决方案,因为内存中有两个相同的对象。我需要找到方法来向构造函数说明我在创建的对象中需要哪些对象,构造函数会将这些对象作为参数传递给自己?这很难描述,但我希望你能理解我的问题。

1 个答案:

答案 0 :(得分:0)

我认为您当前方法的丑陋之处在于您正在扫描整个模型目录并加载它找到的任何内容。相反,您应该考虑使用某种类型的工厂模式来根据需要加载对象。参考:

简单示例:

try_module_get()

这更干净,因为您只需要根据需要加载对象。您可以进一步修改它以满足您的确切需求。