首页 > 其他 > 详细

单例模式

时间:2020-01-07 00:54:28      阅读:106      评论:0      收藏:0      [点我收藏+]

三私一公:

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;

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

技术分享图片

 

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

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

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

技术分享图片

单例模式

原文:https://www.cnblogs.com/waterliang/p/12158849.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!