PHP - 将数据库连接传递给各种类

时间:2012-08-05 12:25:53

标签: php oop class pdo

我有一个包含许多类的PHP项目,以及一个我从网上下载的PDO Wrapper类似乎相当不错:

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;
}

然后从那里引用,但问题是我必须更改整个网站中的每个构造函数。有没有办法解决这个问题,这样我就可以编辑现有代码的最小数量?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

require_once'/PDOclass.php';

然后制作实例

$a=new PDAclass;

答案 2 :(得分:0)

你说$ db是在你的包含文件中定义的。所以只需包含该文件即可访问该参数。