- 单例
- 作用
- 用途
- 例子
- 核心对象方法
单例
单例模式确保类在全局只能有一个实例,因为它的实例是由自己保存,在类的外部也无法对该类进行实例化。
作用
PHP的单例模式是为了避免重复创建对象带来的资源消耗。
用途
实际项目中像数据库查询,日志输出,全局回调,统一校验等模块。这些模块功能单一,但需要多次访问,如果能够全局唯一,多次复用会大大提升性能。
例子
<?php/*** Created by PhpStorm.* User: yf* Date: 2018/5/24* Time: 下午4:17*/namespace EasySwoole\Component;class Di{use Singleton;private $container = array();public function set($key, $obj,...$arg):void{/** 注入的时候不做任何的类型检测与转换* 由于编程人员为问题,该注入资源并不一定会被用到*/$this->container[$key] = array("obj"=>$obj,"params"=>$arg,);}function delete($key):void{unset( $this->container[$key]);}function clear():void{$this->container = array();}/*** @param $key* @return null* @throws \Throwable*/function get($key){if(isset($this->container[$key])){$obj = $this->container[$key]['obj'];$params = $this->container[$key]['params'];if(is_object($obj) || is_callable($obj)){return $obj;}else if(is_string($obj) && class_exists($obj)){try{$this->container[$key]['obj'] = new $obj(...$params);return $this->container[$key]['obj'];}catch (\Throwable $throwable){throw $throwable;}}else{return $obj;}}else{return null;}}}
Di容器设置全局回调。
核心对象方法
核心类:EasySwoole\Component\Singleton。
获取对象
- mixed $args 参数
static function getInstance(…$args)
