💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 5-2 单例模式 ### 第一步:构造方法变成私有方法 *D:\wamp\www\demo\oop\framework\Think\Database.php* ~~~ private function __construct() { // } ~~~ ~~~ Fatal error: Call to private Think\Database::__construct() from invalid context ~~~ 此时,屏蔽了使用 `new` 实例化这个类的方法。 ### 第二步:声明一个静态的获取对象的方法 *D:\wamp\www\demo\oop\framework\index.php* ~~~ static protected $obj; private function __construct() { // } static public function getDbInstance() { if (self::$obj) { return self::$obj; } else { self::$obj = new self(); return self::$obj; } } ~~~ 静态方法不能访问非静态成员,所以声明了一个静态属性用来存储对象。单例模式指的是:当对象实例化后,就直接返回该对象,而不再生成新的对象。 ### 第三步:将工厂类中的实例化也采用单例模式 *D:\wamp\www\demo\oop\framework\Think\Factory.php* ~~~ static function createDatabase() { return new Database(); } ~~~ 改为 ~~~ static function createDatabase() { return Database::getDbInstance(); } ~~~ ### 第四步 ~~~ $obj = Think\Database::getDbInstance(); $obj = Think\Factory::createDatabase(); var_dump($obj); ~~~ 在 index.php 文件中实例化单例模式的类,无论实例化多少次,都只生成1个对象。