先写一下self和this的区别,简单讲就是self是引用静态类的类名,而$this是引用非静态类的实例名。php
首先参考一段代码this
class Dog { } $dog1 = new Dog(); $dog2 = new Dog(); if($dog1 === $dog2){ echo '这是同样的'; }else{ echo "这不是同样的"; }
必然的,会弹出这不是同样的。两次new分别建立了对象。code
再看下面对象
/** * 单例模式 * 使用单例模式避免大量的new操做消耗资源。 * 1,构造方法私有化,private * 2,经过静态成员变量保存对象 * 3,经过公共静态方法建立对象 */ class Dog { private function __construct() { } //静态属性保存单列对象 static private $instance; //经过静态方法建立单列对象 static public function getInstance() { //判断$instance是否为空,为空建立,不为空直接返回 if (!self::$instance) { self::$instance = new self(); } return self::$instance; } } $dog1 = Dog::getInstance(); $dog2 = Dog::getInstance(); if($dog1 === $dog2){ echo '这是同样的'; }else{ echo "这不是同样的"; }