三私一公:

1. 私有化属性

2. 私有化构造方法

3. 私有化克隆方法

4. 公有化静态方法,供外部调用

 

单例类:

<?php

namespace app;

class Database
{
    /**
     * 私有化静态属性
     */
    private static $db;

    /**
     * 私有化构造方法
     * Database constructor.
     */
    private function __construct(){}

    /**
     * 私有克隆方法
     * Database constructor.
     */
    private function __clone(){}

    /**
     * 公有化静态方法
     */
    static public function getInstance()
    {
        if (! self::$db) {
            // 实例化自身,并且保存在属性中,静态属性将在程序结束时释放
            self::$db = new self();
        }
        return self::$db;
    }

    /**
     * 测试方法,这里只能是public
     */
    public function test()
    {
        return "测试成功";
    }
}

 

在需要用到该类的地方用一下方法调用

<?php

spl_autoload_register(function ($class) {
    include $class . '.php';
});

// 单例中的方法只能通过getInstance这个静态属性来调用
$res = \app\Database::getInstance()->test();
echo $res;

最后附上我的目录结构,方便对比命名空间

 

单例到此完成了,但是上面有一句话需要注意:实例化自身,并且保存在属性中,静态属性将在程序结束时释放

为什么说单例减少资源浪费,主要是因为静态属性是保存在内存中的,因为静态属性是放在内存中的全局区(下图中的数据区),该区内的资源会一直在内存中,当程序结束时才会被释放。

以下是百度到的内存区块说明图,仅供参考:

posted on 2020-01-06 22:21  _时光悠悠  阅读(109)  评论(0)    收藏  举报