PDO包装类-如果连接检查


PDO Wrapper Class - If Connected Check

我正在写一个PDO Wrapper作为一个学习项目,我试图将它与使用依赖注入相结合。我当前的设置有一个将设置依赖关系的工厂。因此,例如,我将有一个表单类,它传递几个对象来输出html属性等。

我想保持它,但在我的工厂类中,我只想使用每个对象的一个实例,而不是每次都创建一个新对象。举个例子可能会更好地解释这一点:

class Factory {
public static function Form() {
    $html = new Html;
    $form = new Form;
    $form->html = $html;
    return $form;
}
}

和HTML类:

class HTML {
// Outputs attributes in the given array
public function attributes($attributes = array()) {
    // Create string of HTML attributes
    foreach($attributes as $key => $attribute):
        $tags .= $key . '=' . $attribute . ' ';
    endforeach;
    return $tags;
}
}

基本上,我想在Factory中创建HTML对象,然后将其传递给Form方法,该方法将创建表单并允许我访问HTML方法。

我假设我将不得不设置一个构造函数在我的工厂,将创建HTML对象?我从中看到的问题是,每次我运行Factory::Form, HTML对象将被创建一个新的。有什么简单的办法吗?例如,当使用Factory时,检查是否创建了HTML对象,如果创建了,则使用当前对象。

这可能很简单,但任何帮助都会很棒。

我不确定是否正是你的意思,但是你的工厂类可以接受Form()方法中的参数,如

class Factory {
  public function Form(Html $html = NULL){
    if(is_null($html)){
      $html = new Html();
    }
   // etc.
}

对于另一个问题,实际上工厂类不需要构造函数。您只需要调用适当的方法。

编辑

我还没有意识到你的表单方法是静态的。我认为你还需要类中的静态字段,如:

class Factory {
  public static $html;
  public static function Form() {
    if(is_null($this->html)){
       $this->html = new Html;
    }
    $form = new Form;
    $form->html = $this->html;
    return $form;
  }
}

请注意,在此解决方案中,使用此工厂创建的每个对象将具有相同的$html对象!