1

多くのクラスを持つPHPプロジェクトと、Webから取得したPDOラッパークラスがあります。これはかなり良いようです。

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

そしてそこから参照しますが、それに関する問題は、Webサイト全体のすべてのコンストラクターを変更する必要があることです。既存のコードを最小限の量で編集できるように、これを解決する方法はありますか?

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 に答える