In a PHP5 class, when does a private constructor get called?(在 PHP5 类中,何时调用私有构造函数?)
问题描述
假设我正在编写一个 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 类中,何时调用私有构造函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 PHP5 类中,何时调用私有构造函数?


基础教程推荐
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01
- HTTP 与 FTP 上传 2021-01-01
- PHP 守护进程/worker 环境 2022-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01
- 使用 PDO 转义列名 2021-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01