[设计模式] 单例模式

Singleton.php文件

<?php
namespace app\singleton\controller;

/**
 * Class Singleton 单例模式
 */
class Singleton
{
    /**
     * @var null   private\static:一个类只有一个实例
     */
    private static $singleton = null;

    /**
     * Singleton constructor.  private:不允许外部实例化,类必须自行创建这个实例
     */
    private function __construct()
    {
    }

    /**
     * private:不允许外部通过克隆实例化类
     */
    private function __clone()
    {
    }

    /**
     * @return Singleton|null  类自行实例
     */
    static public function getInstance()
    {
        // 如果还未实例化,则 new
        if (is_null(self::$singleton)) {
            self::$singleton = new self();
        }
        return self::$singleton;
    }
}

TestSingleton.php文件

<?php
namespace app\singleton\controller;
use PHPUnit\Framework\TestCase;  // composer 安装 PHPUnit

/**
 * Class TestSingleton  利用 PHPUnit 来测试
 */
class TestSingleton extends TestCase
{
    public function test()
    {
        // 调用两次 getInstance()
        $one = Singleton::getInstance();
        $two = Singleton::getInstance();

        // 断言这两个对象是相等的。结果是相等。
        $this->assertEquals($one, $two);
    }
}

测试结果

【设计模式】单例模式

PHPUnit 笔记

断言方法的用法:静态 vs. 非静态
    1、PHPUnit 的各个断言是在 PHPUnit\Framework\Assert 中实现的。 
    PHPUnit\Framework\TestCase 则继承于 PHPUnit\Framework\Assert。

    2、各个断言方法均声明为 static,可以以 PHPUnit\Framework\Assert::assertTrue() 的方式调用, 
    也可以以 $this->assertTrue() 或 self::assertTrue() 的方式调用。

    3、实际上,只要包含了 PHPUnit 中的 src/Framework/Assert/Functions.php 源码文件,
    就可用 assertTrue() 这样的方式来调用全局函数封装。

    4、断言方法是声明为 static 的,这使其可以(重)用于测试对象的作用域之外。
    全局函数封装让开发者用 assertTrue() 代替 $this->assertTrue() 或者 self::assertTrue() 。
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!