php设计模式之单例模式(singleton)
发表于:2019-08-16 10:13:22浏览:50次
单例模式是最常见的模式之一,在Web应用的开发中,常常用于允许在运行时为某个特定的类创建仅有一个可访问的实例。
```php
_pdo = new PDO($config['dsn'], $config['user'], $config['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$config['charset']."';"));
// $this->_pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
// $this->_pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->_pdo = $config;
echo("连接{$config}数据库....\n");
}
/**
* 防止对象被复制
*/
private function __clone(){
trigger_error('Clone is not allowed !');
}
/**
* Return self instance[创建一个用来实例化对象的方法]
*
* @return self
*/
public static function getInstance($config)
{
if (empty(self::$instance)) {
echo("实例化了对象\n");
self::$instance = new self($config);
}
return self::$instance;
}
//获取pdo实例
public function getPdo() {
echo("获取pdo实例\n");
return $this->_pdo;
}
}
// @test
$firstMysql = Mysql::getInstance("127.0.0.1");
// 实例化了对象
// 连接127.0.0.1数据库....
$firstMysql->getPdo();
// 获取pdo实例
$secondMysql = Mysql::getInstance("127.0.0.1");
$secondMysql->getPdo();
// 获取pdo实例
```
输出
```bash
vagrant@vagrant-ubuntu:~$ sudo php singleton.php
实例化了对象
连接127.0.0.1数据库....
获取pdo实例
获取pdo实例
```
#### 多个类创建单例的构造方式
```php
a[] = 1;
// 创建实例 : FirstProduct
SecondProduct::getInstance()->a[] = 2;
// 创建实例 : SecondProduct
FirstProduct::getInstance()->a[] = 11;
SecondProduct::getInstance()->a[] = 22;
print_r(FirstProduct::getInstance()->a);
// Array ( [0] => 1 [1] => 11 )
print_r(SecondProduct::getInstance()->a);
// Array ( [0] => 2 [1] => 22 )
```
输出
```bash
vagrant@vagrant-ubuntu:~$ sudo php singleton2.php
创建实例 : FirstProduct
创建实例 : SecondProduct
Array
(
[0] => 1
[1] => 11
)
Array
(
[0] => 2
[1] => 22
)
```

