在 PHP5 类中,何时调用私有构造函数?
Posted
技术标签:
【中文标题】在 PHP5 类中,何时调用私有构造函数?【英文标题】:In a PHP5 class, when does a private constructor get called? 【发布时间】:2010-09-06 18:23:31 【问题描述】:假设我正在编写一个旨在成为单例的 php (>= 5.0) 类。我读过的所有文档都说将类构造函数设为私有,因此不能直接实例化该类。
所以如果我有这样的事情:
class SillyDB
private function __construct()
public static function getConnection()
除了我在做一个
new SillyDB()
在类本身内部调用?
为什么允许我从内部实例化 SillyDB?
【问题讨论】:
【参考方案1】:__construct()
只有在您从包含私有构造函数的类的方法中调用它时才会被调用。所以对于你的 Singleton,你可能有这样的方法:
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();
您能够/想要从内部实例化类的原因是您可以检查以确保在任何给定时间仅存在一个实例。毕竟,这就是 Singleton 的全部意义所在。使用 Singleton 进行数据库连接可确保您的应用程序一次不会建立大量数据库连接。
编辑:按照@emanuele-del-grande 的建议添加了 $
【讨论】:
在self::Connection
中引用静态属性Connection
时不带$
时会出现小错误。这样,PHP 解释器将其解析为一个常量,如果没有定义,则会引发错误。以上是关于在 PHP5 类中,何时调用私有构造函数?的主要内容,如果未能解决你的问题,请参考以下文章