1

我有一个包含许多类的 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;
}

然后从那里引用,但问题是我必须更改整个网站中的每个构造函数。有没有办法解决这个问题,使我能够对现有代码进行最少的编辑?

4

3 回答 3

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
于 2012-08-05T12:38:43.833 回答
0

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

require_once'/PDOclass.php';

然后制作实例

$a=new PDAclass;
于 2012-08-05T12:36:00.547 回答
0

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

于 2012-08-05T12:37:20.123 回答