Php面向对象 – 单例模式_PHP教程
Jul 13, 2016 am 10:19 AMPhp面向对象 – 单例模式
Php面向对象 – 单例模式
保证类只有一个实例
1. 如何可以解决一个类可以被无限地实例化?
New,就能实例化一次,怎么去限制,用户不能无限次地new?
将构造方法私有化。所有外部的new都操作失败
class MySQLDB
{
private function __construct()
{
}
}
2. 一旦构造方法私有化,意味着类不能再类外实例化。但可以在类内实例化。
增加一个公共的静态方法,通过类来调用该方法,在方法内可以执行new操作。
class MySQLDB
{
private function __construct()
{
}
public static function getInstance()
{
return new MySQLDB;
}
}
$o = MySQLDB::getInstance();
此时,用户需要该类的对象,方法内的代码就会执行,因此,我们可以通过完善方法内的逻辑,限制用户得到对象的操作。
3. 在上面的方法内,使用这样的逻辑:每次执行时做判断,判断该类是否已经实例化对象,如果实例化了,则直接返回这个实例化好的对象。如果没有实例化,则实例化一个新的,然后返回。
如何判断?
在这个对象被实例化出来时,保存起来。
例子:
class MySQLDB
{
private static $instance;
private function __construct()
{
}
public static function getInstance()
{
if(!self::$instance instanceof self)
{
self::$instance= new self;
}
return self::$instance;
}
}
4. 克隆也可以得到新对象,因此需要限制克隆。
私有化 __clone()方法
class MySQLDB
{
private static $instance;
private function __construct()
{
}
private function __clone()
{
}
public static function getInstance()
{
if(!self::$instance instanceof self)
{
self::$instance= new self;
}
return self::$instance;
}
}

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

À quoi sert le mode Ne pas déranger de WeChat ?

A quoi sert le mode veille sur iPhone ?

Convertissez un tableau ou un objet en chaîne JSON à l'aide de la fonction json_encode() de PHP

Le mode Ne pas déranger ne fonctionne pas sur iPhone : correctif

Comment quitter le mode S sous Windows 10/11

iPhone 15 Pro : Comment se débarrasser du symbole du mode silencieux dans la barre d'état

Qu'est-ce que l'objet Request en PHP ?

Guide d'utilisation du mode veille dans iOS 17
