0

重複の可能性:
PHP および PDO クラスに関する質問

基本的なphp PDO拡張クラスを誰かが手伝ってくれるかどうか疑問に思っていましたが、他のクラスでグローバル$ dbを使用してすべてのmysqlを実行したいと考えていました。データベースに接続できますが、どのクラスでもアクセスできるグローバル変数を使用したいだけです。

しかし、新しいクラスでデータベース クラスを拡張したくありません。また、クラス コンストラクターでデータベース接続変数を渡したくありません。

これを行う方法はありますか?

ここに私が達成したいいくつかのコーディングサンプルがあります.コーディングエラーを許してください..

//--DATABASE CLASS
class Database Extends PDO {

    protected $database_hostname = DB_HOST;
    protected $database_username = DB_USER;
    protected $database_password = DB_PASSWORD;
    protected $database_name = DB_NAME;
    protected $database_type = DB_TYPE;

    public function __construct() {

        try {
            parent::__construct($this->database_type . ':host=' . $this->database_hostname . ';dbname=' . $this->database_name, $this->database_username, $this->database_password, array(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION));
        } catch (PDOException $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
    }

}



//--TEST CLASS
class test1 {

    //--INSIDE MY FUNCTIONS I WANT TO BE ABLE TO USE A $db to do my msql stuff
    public function test1a() {

        $stmt = $db::prepare('SELECT * FROM table');
        $stmt->excute();
    }

}

//--TEST CLASS 2
class test2 {

    public function test2a() {

        $stmt = $db::prepare('SELECT * FROM table');
        $stmt->excute();
    }

}

//--CREATE THE DATABASE GLOBAL
 $db = new Database();
 $testers = new test2();

上記を実行すると、$db が未定義の変数であるというエラーが表示されます: db

4

2 に答える 2

1

私はそれが推奨されていないことを読みましたが、次のことを行うことができます:(グローバルスコープ内の)すべてのクラスの外で接続を初期化します:
$db = new Database();
次に、Db接続が必要なすべての関数で次のように記述します:
global $db;

于 2013-02-03T16:15:20.823 に答える
1

関数内で使用$dbする場合、PHPは変数がローカル関数スコープ内にあることを想定しています。グローバル変数にアクセスするには、次のいずれかを使用します

  1. $GLOBALS['db']->prepare重要->代わりに使用::;静的に呼び出すprepareことは機能しません)、または
  2. global $db; $db->prepare(...);
于 2013-02-03T16:16:23.893 に答える