1.单例模式
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/5/10 0010 * Time: 13:14 *单例模式:一个类允许创建一个实例对象 * 1.一个站点只能允许链接一个数据库 * 2.一个站点只能允许一个配置类的实例对象 * */ class demo{} class Config { /* * 必须先声明一个静态的私有属性 用来保存当前类的实例 * 1.为什么必须是静态属性:因为静态成员是属于类并被类的所有实例共享 * 2.为什么是私有的:不允许外部直接访问 经允许通过类的控制方法 * 3.为什么声明为null;因为外部引用的时候需要检测实例的状态 判断是否被实例化 * * */ private static $instence = null; //保存用户定义的配置参数 private $setting = []; //构造器私有化 禁止外部实例化 private function __construct() { } //克隆方法私有化 禁止外部克隆对象 private function __clone() { // TODO: Implement __clone() method. } //因为静态属性返回类实例 只能在静态方法中访问静态属性 //必须创建一个静态方法来生成当前类的唯一实例 public static function getInstence() { //检测外部是否已经实例化对象 if(self::$instence == null){ //没有实例化则实例化 self::$instence = new self(); } //返回实例化对象 return self::$instence; } //设置配置项 public function set($index,$value) { $this->setting[$index] = $value; } //读取配置项 public function get($index) { return $this->setting[$index]; } } $obj1 = new demo(); $obj2 = new demo(); var_dump($obj1,$obj2); echo '<hr>'; $obj3 = Config::getInstence(); $obj4 = Config::getInstence(); var_dump($obj3,$obj4); echo '<hr>'; $obj4->set('host','127.0.0.1'); echo $obj4->get('host');
运行实例 »
点击 "运行实例" 按钮查看在线实例
2.工厂模式
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/5/10 0010 * Time: 14:15 * 工厂模式. *1.用于创建多种类型的多个实例对象 */ //声明一个形状类 class Shape { //声明静态方法创建一个图形 更具形状的不同创建实例 public static function create($type,array $size=[]){ // 检测形状 switch ($type) { case 'rectangle': return new Rectangle($size[0],$size[1]); break; case 'triangle': return new Triangle($size[0],$size[1]); break; } } } //声明一个长方形 class Rectangle { private $width; private $height; //初始化数据 public function __construct($width,$height) { $this->height = $height; $this->width = $width; } //计算面积 public function S() { return $this->height * $this->width; } } //声明一个三角形 class Triangle { private $bottom; private $height; //初始化数据 public function __construct($bottom,$height) { $this->height = $height; $this->bottom = $bottom; } //计算面积 public function S() { return ($this->height * $this->bottom)/2; } } //调用静态方法 $test = Shape::create('rectangle',[10,30]); echo $test->S().'<hr>'; $test2 = Shape::create('triangle',[16,30]); echo $test2->S();
运行实例 »
点击 "运行实例" 按钮查看在线实例
3.注册树模式
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/5/10 0010 * Time: 13:57 * 注册树模式 * 1.原理是创建一个对象集合 也叫做对象池,用数组把这些对象存储; */ //声明多个类 class demo1{} class demo2{} class demo3{} class demo4{} //声明注册树对象 class regedit { //声明一个静态公有的属性来储存对象集合 public static $objs = []; //将对象储存进数组 上树 public static function set($index,$value) { self::$objs[$index] = $value; } //将对象取出来使用 public static function get($index) { return self::$objs[$index]; } //使用完销毁 节省资源 public static function delete($index) { unset(self::$objs[$index]); } } //上树 regedit::set('demo1',new demo1()); regedit::set('demo2',new demo2()); regedit::set('demo3',new demo3()); regedit::set('demo4',new demo4()); //检测是否上树 var_dump(regedit::$objs); echo '<hr>'; //使用get方法查看 var_dump(regedit::get('demo2')) ; echo '<hr>'; //销毁 regedit::delete('demo1'); var_dump(regedit::$objs);
运行实例 »
点击 "运行实例" 按钮查看在线实例