PDO包装类 - 如果连接检查

时间:2013-05-14 08:48:17

标签: php dependency-injection constructor factory

我正在编写一个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对象,如果是,则使用当前的对象。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

修改

我没有意识到你的Form方法是静态的。我认为你在课堂上也需要静态字段,例如:

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对象!