php - 在 PHP5 类中,什么时候调用私有(private)构造函数?

标签 php oop constructor

假设我正在编写一个旨在成为单例的 PHP (>= 5.0) 类。我读过的所有文档都说将类构造函数设为私有(private),因此不能直接实例化该类。

所以如果我有这样的事情:

class SillyDB
{
  private function __construct()
  {

  }

  public static function getConnection()
  {

  }
}

除了我在做一个

new SillyDB() 

在类本身内部调用?

为什么允许我从内部实例化 SillyDB?

最佳答案

__construct() 只有在您从包含私有(private)构造函数的类的方法中调用它时才会被调用。所以对于你的单例,你可能有这样的方法:

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();

您能够/希望从自身内部实例化该类的原因是您可以检查以确保在任何给定时间只存在一个实例。毕竟,这就是单例的全部意义所在。将单例用于数据库连接可确保您的应用程序不会同时建立大量数据库连接。


编辑:按照@emanuele-del-grande 的建议添加了 $

关于php - 在 PHP5 类中,什么时候调用私有(private)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26079/

相关文章:

java - 关于封装的一个问题

php - 如何按last_visit排序并显示用户的最近访问者?

C++ 模板对空构造函数的需求

c++ - C++中的构造函数执行顺序

php - 使用 phpspec 测试命令处理程序

php - 最低 varchar 数量

c++ - 使用模板类时没有合适的默认构造函数可用

java - 使用创建类的对象创建构造函数

php - 在 php/mysql 中显示对其他人隐藏的 friend 项目列表的最佳方式

php - 如何重置 array_diff 结果中的索引?