单例模式
在使用面向对象的方式开发时,使用单例模式可以避免过多的new操作消耗大量的资源。单例模式可以通过一个类来全局控制某些配置信息。
单例模式有以下特点:
- 只能有一个实例。
- 必须自行创建这个实例。
- 必须给其他对象提供这一实例。
所以在单例模式中
- 构造函数和析构函数必须声明为私有,防止外部程序new类从而失去单例模式的意义
- _clone方式必须声明为私有,防止克隆对象
class Singleton{
private $name;//声明私有的实例变量
private function __constuct(){//声明私有构造函数
}
static public $instance;//声明静态变量(保存在类中的唯一实例)
static public function getInstance(){
if(!self::$instance){
self::$instance=new self();
}
return self::$instance;
}
public function setName($n){
$this->name=$n;
}
public function getName(){
return $this->name;
}
}
$a = Singleton::getInstance();
$a->setName('abc ');
echo $a->getName(), PHP_EOL;//输出 abc
$b = Singleton::getInstance();
$b->setName('efg');
echo $b->getName(), PHP_EOL;//输出 efg
echo $a->getName(), PHP_EOL;//输出 efg
if($a==$b){
echo "相同对象", PHP_EOL;//输出相同对象
}