$ conは、新しいPDOオブジェクトをインスタンス化するため、すでにオブジェクトになっています。PDOオブジェクトに機能を追加しようとしているのでない限り、それをラップしても意味がありません。
とはいえ、userdb / PDOオブジェクト(ラッパーを使用するかどうかによって異なります)を他のオブジェクトと共有する最良の方法は、依存性注入を使用することです。これは、dbを必要なオブジェクトに渡すための空想的な用語です。PHPではオブジェクトはデフォルトで参照によって渡されるため、最初にdbオブジェクトを作成すると、コンストラクター/メソッド引数としてオブジェクトを受け取るすべてのオブジェクトが同じ単一のインスタンスを使用します。
編集:依存性注入の実装へのリンク
EDIT2:小さなプロジェクトでのDIの明確化-
通常のDIパターンには、通常、DIコンテナと呼ばれる特別なオブジェクトが必要です。これは、依存関係を必要とするオブジェクトに自動的に依存関係を挿入する特殊用途のオブジェクトです。小さなプロジェクトの場合、それはやり過ぎです。DIの単純で複雑度の低いバージョンは、次のとおりです。
class SomeClass {
protected $db;
public function __construct($db) {
$this->db = $db;
}
}
class SomeClass2 {
public function SomeMethod($db) {
// do something with the db
}
}
$db = new PDO(/* connection string */);
$obj = new SomeClass($db, /* other constructor args */);
// or
$obj2 = new SomeClass2(/* constructor args */);
$obj2->someMethod($db, /* method args */);
魔法は、オブジェクトがPHPでデフォルトで参照によって渡されるため、$objと$obj2が同じdb接続を使用することです。
全体的な考え方は、静的メソッドを使用してスコープやカプセル化を壊さないようにすることと、クラスとそのメソッドが機能するために必要なものについて前もって確認することです。
シングルトンは正反対です。これらはスコープをバイパスする静的メソッドを介してアクセスされ、呼び出されて渡されないため、メソッドシグネチャに表示されることはありません。したがって、コードに精通していない人は、その隠された要件に気付くことはありません。 シングルトンパターンの成文化を支援したエーリヒガンマでさえ、それについて後悔しています:
私はシングルトンを落とすことに賛成です。その使用は、ほとんどの場合、デザインの匂いです。
共有メモリの概念がなく、スクリプトがリクエストごとに1回実行されるPHPでは、シングルトンを使用する唯一の理由は、単一のリソースに簡単にアクセスできるようにすることです。オブジェクトは参照によって渡されるため、1つのインスタンスを複数のオブジェクトと自然に共有できます。そこから、それは優れた設計と委任についてです。