【设计模式】PHP单例模式的应用场景和实现-php教程

资源魔 35 0
择要

甚么是单例模式?

一个类只容许创立一个工具(或许实例),那这个类就是一个单例类,这类设计模式就叫作单例设计模式,简称单例模式。

为何要应用单例?

  1. 解决资本拜访抵触。

    例如:往文件中打印日记的性能。

  2. 示意全局惟一类。

从营业概念上,假如有些数据正在零碎中只应保留一份,那就比拟适宜设计为单例类。例如:惟一递增 ID 号码天生器。

完成形式

完成php的单例模式需求三个步骤

* 一个动态成员变量,用来保留类。

* 为避免工具创立或许克隆,需求吧__construct以及__clone申明为公有。

* 一个拜访这个实例的公共的动态办法,一般是getInstance

class single
{
    private static  $instance ;
    private function __construct(){}
    private function __clone(){}
    public static function getInstance() {
        if (empty(self::$instance)) {
            self::$instance = new single();
        }
        return self::$instance;
    }
}

给单例类加之一个办法,猎取ID。一个全局惟一的id号码天生器就呈现了。

class single
{
    private  $id = 0;
    private static  $instance ;
    private function __construct(){}
    private function __clone(){}
    public static function getInstance() {
        if (empty(self::$instance)) {
            self::$instance = new single();
        }
        return self::$instance;
    }
    public function getId() {
        
        return $this->id++;
        
    }
}

真是自作掩饰,那末正在多线程的状况下发作了甚么呢?

完成一个线程惟一的单例

这里不能不提到php的ts以及nts版本区分,nts(Non Thread Safe)复线程构建,线程间共用缓存数据。ts(Thread Safe)具备多线程性能的构建,多个线程间应用没有同的数据正本。

应用ts版本的php主动晋级为线程平安模式,pthreads扩大只能装置正在ts版本的php上。

pecl收录的最初一个版本pthreads就是基于php7.0,github上的pthreads名目也曾经中止更新,感兴味只能去7.0思念汗青了。

我正在php-7.0.9-Win32-VC14-x64 这个版本下装置了pthreads扩大。

多线程的状况下,单例的范畴就从过程惟一变为了线程惟一了。

require 'single.php';
class Request extends Thread {
    public $url;
    public function __construct($url) {
        $this->url = $url;
    }
    public function run() {
        echo single::getInstance()->getId();
        echo "\n";
    }
}
$chG = new Request("www.谷歌");
$chG ->start();
$chG->join();
echo $chG->getThreadId();
echo "\n";
$chB = new Request("www.百度");
$chB ->start();
$chB->join();
echo $chB->getThreadId();
echo "\n";

这里创立了两个线程,但两次执行均可以取得从0开端的id,阐明两个线程内的single类是两个没有同的单例工具。

总结

完成php的单例模式需求三个步骤

* 一个动态成员变量,用来保留类。

* __construct以及__clone申明为公有,避免创立或许克隆。

* 一个动态办法,一般是getInstance,用来拜访这个实例。

php的多线程我也没用过,看起来是条没有归路,没有晓得各人怎样看。

以上就是【设计模式】PHP单例模式的使用场景以及完成的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 单例模式

抱歉,评论功能暂时关闭!