假设我正在编写一个旨在成为单例的 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/