💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
**1、什么是单例模式?** 从名字可以理解,确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。通俗理解(单例模式一般也就是强调类的静态调用,一个进程对一个类的多次调用只产生一个类对象) **2、单例模式有那些好处呢?** PHP应用主要用于数据库应用,因此会存在大量的数据库操作,使用单例模式可以避免大量的 new 操作消耗的资源。 单例模式是一种对于全局变量的改进 3、实例场景: ~~~ <?php /* * PHP生成对象之设计模式—单例模式 * 用于保存基本信息的单例类 存储URL目录、文件路径等数据 * 1、Preferences对象可以被系统中中任何对象使用 * 2、Preferences对象不被存储在会被覆写的全局变量中 */ class Preferences{ private $props=array(); //保存例实例在此属性中 private static $instance; //构造函数声明为private,防止直接创建对象 private function __construct(){} //单例方法 public static function getInstance(){ if(empty(self::$instance)){ self::$instance=new Preferences(); } return self::$instance; } //设置属性和属性值 public function setProperty($key,$val){ $this->props[$key]=$val; } //读取值 public function getProperty($key){ return $this->props[$key]; } } //得到Preferences类的单例对象 $pref=Preferences::getInstance(); //设置一个属性 name 的值 为matt $pref->setProperty("name","matt"); //移除引用 unset($pref); //得到Preferences类的单例对象 $pref2=Preferences::getInstance(); //输出属性name 的属性值 该属性值未丢失 print $pref2->getProperty("name"); ~~~ ~~~ 单例模式:是一种类的设计。。。 单例模式简称三私一公 私有化构造方法:不在让外部产生多个对象 私有化克隆方法:不允许对象被克隆新对象 公有化静态方法:运行进入类内部产生对象 私有化静态属性:保存已经产生的对象 class Db{ ##静态属性:私有化,保存已经产生对象 private static $obj = null; ##私有化构造方法:防止外部无限实例化对象 private function __construct(){ echo __METHOD__; } ##公有静态方法:产生对象返回外部调用者 public static function run(){ ##判定对象是否已经产生过 if(!self::$obj instanceof self){ //没有产生对象,new一个对象 return self::$obj = new self(); } return self::$obj; } private function__clone(){} } $new = Db::run(); $s = Db::run(); var_dump($new,$s); ~~~