使用主要工厂?

时间:2014-06-29 17:33:05

标签: php

所以我想要一个模型,我想以正确的方式去做。我这样做了吗?

<?php
 class Factory
       {
             public function buildModel($model) 
             {
                   require MODELS . $model . '.php';
                   return new ucfirst($model):
             }
       }

在我的控制器中

public function create()
      {
             ...
             $model = $this->factory->buildModel('user');
             $model->save();
      }

1 个答案:

答案 0 :(得分:0)

看起来不错;可能会有一些改进吗?

我怀疑你想传递参数或依赖注入其他对象到加载的模型中,你的用户类可能需要数据库访问,还是路由?:

同样$this->model->load()更适合。

<?php 
public function create()
{
    ...

    $model = $this->model->load('user', $something, $something_else);
    $model->save();
}
?>

因此模型加载器看起来像:

<?php 
class model{

    /**
     * model loader 
     */
    private function load()
    {
        // retrieve passed arguments
        $args = func_get_args();
        // delete the first argument which is the class name
        $class = array_shift($args);
        try
        {
            $path = MODELS . $class . '.php';

            if (file_exists($path))
            {
                require_once ($path);
                $ref = new ReflectionClass(basename($class));
                return $ref->newInstanceArgs($args);
            } else
            {
                throw new Exception('Model class not found: ' . htmlentities($path));
            }

        }
        catch (exception $e)
        {
            return $e->getMessage();
        }
    }

}
?>

并且用户类将获得类似的构造参数,

<?php
Class user{

    function __construct($something, $something_else){
        $this->something = $something;
        $this->something_else = $something_else;
    }

    function save(){
        //yada

    }
    ...
}
?>