12

静的メソッドを使用する複数のクラスがあります。これらの関数は、次を使用してデータベースに接続します

$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

ここで、定数 DB_SERVER、DB_USER、DB_PASS、DB_NAME は、グローバルにアクセス可能なファイルで定義されたデータベース変数です。最近、私のサイトが遅くなり始め、スクリプトをプロファイリングした後、オブジェクト ($mysqli) を作成するための呼び出しがこの問題を引き起こしていることに気付きました。

私のクラスのほとんどは、次のように mysqli から拡張されています。

public function __construct($user_id) {
    parent::__construct(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
    $this->retrieve_user_details($user_id);
    $this->check_user_account_type();

}

私の理解では、静的メソッドは __construct メソッドを使用しません。

$mysqli オブジェクトを一度作成して、それを必要とするすべての静的メソッドからアクセスできるようにする方法を誰かが教えてくれませんか。

4

3 に答える 3

4

mysqli シングルトンについて詳しく説明するには:

define('SERVER', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', 'password');
define('DATABASE', 'databaseName');

class mysqliSingleton
{
    private static $instance;
    private $connection;

    private function __construct()
    {
        $this->connection = new mysqli(SERVER,USERNAME,PASSWORD,DATABASE);
    }

    public static function init()
    {
        if(is_null(self::$instance))
        {
            self::$instance = new mysqliSingleton();
        }

        return self::$instance;
    }


    public function __call($name, $args)
    {
        if(method_exists($this->connection, $name))
        {
             return call_user_func_array(array($this->connection, $name), $args);
        } else {
             trigger_error('Unknown Method ' . $name . '()', E_USER_WARNING);
             return false;
        }
    }
}

次に、次のように呼び出してデータベース接続を要求できます。

$db = mysqliSingleton::init();

次に、独自のオブジェクトでデータベース接続を取得できます。

class yourClass
{
    protected $db;

    public function __construct()
    {
        $this->db = mysqliSingleton::init();
    }
}
于 2013-06-04T09:21:35.847 に答える
-3

これは、Bootstrap 3 で思いついた最短のバージョンです。

   $(document).ready(function() {
        if (hash = window.location.hash) {
            $('.nav-tabs a[href="' + hash + '"]').tab('show');
        }
    });
于 2016-10-26T21:29:00.877 に答える