单例模式
单例模式,就是在程序中最多只有该类的一个实例存在(本身实例化),一旦创建,就会一直存在于内存。
- 拥有一个构造函数,并且为
private,防止类被实例化。 - 拥有一个私有静态成员变量用来保存类的实例。
- 拥有一个公开的能访问这个实例的静态方法。
- 通常还有一个空的私有
__clone,防止对象被复制。
<?php
/**
* 单例模式
*/
class Singleton
{
/**
* 该属性用来保存实例
* @var
*/
private static $instance;
/**
* 创建一个用来实例化对象的方法
* @return
*/
public static function getInstance()
{
if (is_null(static::$instance)) {
static::$instance = new static;
}
return static::$instance;
}
/**
* 构造函数为private,防止创建对象
*/
private function __construct()
{
}
/**
* 防止对象被复制
*/
private function __clone()
{
trigger_error('Clone is not allowed !');
}
public function say()
{
return '单例模式';
}
}
$say = Singleton::getInstance()->say();
echo $say; //单例模式
注册树模式
注册树模式通过将对象实例注册到一棵全局的对象树上,需要的时候从对象树拿下来使用。
Register.php
<?php
include('A.php');
include('B.php');
class Register
{
/**
* 注册树pool
*/
private static $object = [];
public static function set($key, $value)
{
self::$object[$key] = $value;
}
public static function get($key)
{
if (!isset(self::$object[$key])) {
self::$object[$key] = new $key;
}
return self::$object[$key];
}
}
$a = new A();
$b = new B();
Register::set('aa',$a);
Register::set('bb',$b);
echo Register::get('aa')->a(); //a
A.php
<?php
class A
{
public function a()
{
return 'a';
}
}
B.php
<?php
class B
{
public function b()
{
return 'b';
}
}