先寫一下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 "這不是同樣的"; }