0

PHP で API を構築していますが、質問があります。クラスを使用していますが、これらのクラスのいくつかはデータベースにアクセスする必要があります。ただし、データベースを開くためにすべてのクラスでデータベースの変数を定義したり、mysqli オブジェクトをすべてのクラス コンストラクターのパラメーターとして送信したりする必要はありません。

これについて最善の方法は何ですか?ある種のグローバル変数を定義しますか?

4

3 に答える 3

0

静的クラスを使用するのはどうですか?

class mysqli_wrapper {
private static $db = null;

public static function open() {
    GLOBAL $opts; // this can be global or setup in other ways
    if (!self::$db) {
        self::close();
        self::$db = null;
    }
    self::$db = @mysqli_connect('p:'.$opts['hn'], $opts['un'], $opts['pw'], $opts['db']);
    return self::$db;
}
public static function query($qry) {
    return mysqli_query ( self::$db, $qry );
}
public static function affected_rows() { return @mysqli_affected_rows(self::$db); }
public static function error() { return @mysqli_error(self::$db); }
public static function close() { @mysqli_close(self::$db); }
} // end mysqli_wrapper

mysqli_wrapper::open(); //  Here's how to call it
于 2013-08-23T04:36:19.363 に答える
0

私が維持しているシステムでは、アプリが独自の MySQL データベース、およびリモートの Oracle および SQL Server データベースにアクセスする必要があり、そのためにトレイトを使用しています。これは、MySQL を使用したコードの簡略化です。

dbaccess.php

trait DatabaseAccess {
    protected $db;
    private $host = 'host', $dbName = 'db', $username = 'username', $password = 'pword';

    public function connectToMysql() {
         $this->db= new mysqli(......);
    }
}

次にmyclass.phpで

require 'dbaccess.php'; 
class MyClass {
    use DatabaseAccess;

    //class code.....
}

DatabaseAccess のすべての要素は、MyClass で手動で入力したかのように使用できます。注: PHP < 5.4 を使用している場合、この解決策は不可能です。

于 2013-08-23T04:51:38.853 に答える