index.php
インスタンスがメインで宣言されているデータベースクラスがあります
$db = new Database();
$db
変数を宣言しなくても、他のすべてのクラスでグローバルに認識される方法はありますか
global $db;
各クラスのコンストラクタで?
いいえ。すべてのクラスのコンストラクターで Global $db を宣言する必要があります。
または、グローバル配列を使用できます: $_GLOBALS['vars'];
これを回避する唯一の方法は、 Singleton メソッドと呼ばれる静的クラスを使用してラップすることです(説明については、こちらを参照してください)。しかし、これは非常に悪い習慣です。
class myClass
{
static $class = false;
static function get_connection()
{
if(self::$class == false)
{
self::$class = new myClass;
}
else
{
return self::$class;
}
}
// Then create regular class functions.
}
singleton メソッドは、クラスのインスタンスが 1 つだけであることを確認するために作成されました。しかし、グローバリングをショートカットする方法として人々がそれを使用するため、怠惰/悪いプログラミングとして知られるようになります。
StackOverflow Knowledge
PHP グローバル オブジェクトの使用を回避する方法 グローバルを
使用せずに PHP の関数間で変数を共有
する クラス内のすべての関数でグローバル変数にアクセスできるよう
にする データベース接続のためのグローバルまたはシングルトン
コンストラクターにを含むクラスを作成しglobal $db;
、それから他のすべてのクラスを拡張してみませんか?
あなたが使用できる
$GLOBALS['db']->doStuff();
または代わりに、ある種のシングルトン アクセス メソッドを使用する
Database::getInstance()->doStuff();
クラスを使用して、インスタンスRegistry
を格納および取得できDatabase
ます。
class Registry
{
protected static $_data = array();
public static function set($key, $value)
{
self::$_data[$key] = $value;
}
public static function get($key, $default = null)
{
if (array_key_exists($key, self::$_data)) {
return self::$_data[$key];
}
return $default;
}
}
Registry::set('db', new Database());
$db = Registry::get('db');