2012-08-05 62 views
1

我有一个PHP项目,很多类,而我从网上一个PDO包装类,好像还不错:PHP - 传递DB连接各种类

http://code.google.com/p/php-pdo-wrapper-class/

我看班像现在这样:

class product { 
__constructor($id = 0) { 
//mysql_query and store the product row in $this->row; 
} 

edit($array) { 
//another obvious mysql_query... 
} 

所以他们非常简单,我想将所有的mysql_query移动到PDO的安全性。我已经得到了变量:

$db = new pdo('localhost', 'user', 'pass'); 

在我的上线工作正常包含文件中定义的类之前。但是,我不想写:

global $db; 

在每个函数的开始。我考虑改变__construct()函数来更多的东西,如:

__construct($id = 0, $db = null) { 
$this->db = $db; 
} 

然后从那里引用,但这个问题是,然后我不得不改变每一个构造在我的整个网站。有没有办法解决这个问题,我可以做最少量的编辑已经存在的代码?

回答

2

使所有的模型类从基础模型类继承,然后在基类中定义一个静态变量$db,并在继承的类中使用它。

class BaseModel { 
    public static $db = NULL; 
} 

class UserModel extends BaseModel { 
    public function create() { 
    echo "Use the static variable: " . static::$db . "\n"; 
    } 
} 

BaseModel::$db = "new PDO object"; 
UserModel::create(); 

输出

Use the static variable: new PDO object 
+0

这不是比全局变量更好 – zerkms 2012-08-05 12:41:55

+0

它在,你就不必说'每个函数的内部全局$ db'感更好,这只是“全局”在BaseModel及其后代而不是在任何地方。 – 2012-08-05 12:44:34

+0

这看起来更好,因为我只需要制作一个小型的“BaseModel”类,然后在十个类文件的末尾键入“extends BaseModel”,这将使我在更改所有数据库调用时实质上向后兼容。 谢谢! – 2012-08-05 13:45:15

0

正如你所说,有一个PDO类,所以在其他所有类中轻松地创建一个PDO类的实例。 首先包括PDO类中的任何地方,你需要

require_once'/PDOclass.php'; 

然后进行实例

$a=new PDAclass; 
0

你说的$ DB被定义在您的包含文件。所以只需包含该文件即可访问该参数。