40

シングルトンを意図した PHP (>= 5.0) クラスを書いているとしましょう。私が読んだすべてのドキュメントでは、クラス コンストラクターをプライベートにするように指示されているため、クラスを直接インスタンス化することはできません。

したがって、次のようなものがある場合:

class SillyDB
{
  private function __construct()
  {

  }

  public static function getConnection()
  {

  }
}

私がやっている場合以外に __construct() が呼び出されるケースはありますか?

new SillyDB() 

クラス自体の中で呼び出す?

また、なぜ SillyDB を内部からインスタンス化できるのですか?

4

1 に答える 1

65

__construct()プライベート コンストラクターを含むクラスのメソッド内から呼び出した場合にのみ呼び出されます。したがって、シングルトンの場合、次のようなメソッドがある場合があります。

class DBConnection
{
   private static $Connection = null;

   public static function getConnection()
   {
      if(!isset(self::$Connection))
      {
         self::$Connection = new DBConnection();
      }
      return self::$Connection;
   }

   private function __construct()
   {

   }
}

$dbConnection = DBConnection::getConnection();

クラスをそれ自体からインスタンス化できる/したい理由は、常に1つのインスタンスのみが存在することを確認できるようにするためです。結局のところ、これがシングルトンの要点です。データベース接続にシングルトンを使用すると、アプリケーションが一度に大量の DB 接続を行うことがなくなります。


編集: @emanuele-del-grande の提案に従って、$ を追加

于 2008-08-25T14:22:09.227 に答える