假设我正在编写一个 PHP (>= 5.0) 类,它是一个单例.我读过的所有文档都说要将类构造函数设为私有,这样就无法直接实例化该类.
Let's say I'm writing a PHP (>= 5.0) class that's meant to be a singleton. All of the docs I've read say to make the class constructor private so the class can't be directly instantiated.
所以如果我有这样的事情:
So if I have something like this:
class SillyDB
{
private function __construct()
{
}
public static function getConnection()
{
}
}
除了我在做一个
new SillyDB()
在类本身内部调用?
为什么我完全可以从内部实例化 SillyDB?
And why am I allowed to instantiate SillyDB from inside itself at all?
__construct()
只有在您从包含私有构造函数的类的方法中调用它时才会被调用.所以对于你的单身人士,你可能有这样的方法:
__construct()
would only be called if you called it from within a method for the class containing the private constructor. So for your Singleton, you might have a method like so:
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();
您能够/希望从自身内部实例化类的原因是,您可以检查以确保在任何给定时间只存在一个实例.毕竟,这就是单身人士的全部意义所在.对数据库连接使用单例可确保您的应用程序不会一次建立大量的数据库连接.
The reason you are able/would want to instantiate the class from within itself is so that you can check to make sure that only one instance exists at any given time. This is the whole point of a Singleton, after all. Using a Singleton for a database connection ensures that your application is not making a ton of DB connections at a time.
按照@emanuele-del-grande 的建议添加了 $
Added $, as suggested by @emanuele-del-grande
这篇关于在 PHP5 类中,何时调用私有构造函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!