将我的PDO声明转换为Singleton Factory Class?

时间:2012-11-27 00:35:10

标签: php mysql sql pdo

我正在尝试优化我的PHP代码,我想为PDO连接设置一个单件工厂。让我先解释一下我目前的情况。

我有一个带有一堆函数的functions.php,几乎每个页面的顶部都有

include 'functions.php';

就像很多人为他们的网站做的那样。其中一个功能是我的PDO连接,如下所示:

function db_connect(){
$host = 'localhost';
$port = 3306; 
$database = 'mybigdb';
$username = 'user11';
$password = 'password1';

$dsn = "mysql:host=$host;port=$port;dbname=$database";

$db = new PDO($dsn, $username, $password);
return $db;
}

在我需要数据库连接的每个函数中,我都会这样:

function fetch_row($param1, $param2, $db=NULL){
if(is_null($db))$db=db_connect();

//Rest of code here

}

这样我就可以传递我的数据库对象,但是如果它没有被包含的话就添加它。上面的代码工作正常,我已经使用了一段时间。但是,阅读有关Singleton Factory课程的内容并考虑这可能更好。

我看了this answer about Singleton factories,但我不太清楚如何使用它。我对课程很有兴趣并且正在努力学习。我有一些问题......

  1. 我会在“...”中放入新的ConnectionFactory(...); ?
  2. 我会在哪里复制并粘贴课程代码?我会把它放在functions.php的顶部吗?
  3. 我会在每个功能的开头放什么?我是否仍应尝试通过参数传递数据库对象?
  4. 这种方法真的值得转换吗?或者我目前的策略是好的。
  5. 非常感谢你的帮助:)

1 个答案:

答案 0 :(得分:0)

您可以创建这样的单身。

class Connection {
  private static $_con = null;
  private function _constructor(){
      // here you instantiate de pdo conection
  }
  public static function GetInstace(){
      if ( self::$_con == null ) 
         self::$_con = new Connection();
      return self::$_con;
  }
}

之后你会做:$db = Connection::GetInstance();