0

我今天正在尝试优化我的 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 类的信息并认为这可能会更好。

我读了这个关于单例工厂的答案,但我不太确定如何使用它。我是一个上课和努力学习的菜鸟。我有一些问题...

  1. 我会在他有 new ConnectionFactory(...) 的“...”中放什么??
  2. 我应该在哪里复制和粘贴课程代码?我会把它放在functions.php的顶部吗?
  3. 我会在每个函数的开头放什么?我还应该尝试通过参数传递数据库对象吗?
  4. 这种方法真的值得转换吗?或者是我目前的策略好吗。

非常感谢您的帮助:)

4

1 回答 1

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();

于 2012-11-27T00:46:23.537 回答