Generic placeholder image
闲敲代码、落灯花
What's past is prologue

联系邮箱:email@hezehua.net


联系QQ:1907330840

座右铭

保持热情,持续学习,每日精进

PHP设计模式之单例模式

PHP设计模式之单例模式

本文与作者在csdn上的博文【PHP设计模式之单例模式】保持同步


单例模式用于保证只有单个对象被创建 ,确保对象的唯一性。
示例应用有:
1)计算网站访问量时,可以使用单例模式创建计数器保证计算器的唯一性,并将计数器全局使用,这样即节约资源避免频繁创建销毁,又可以控制并发避免计算数据错误。
2)购物系统中的库存变更,使用单例模式创建库存对象,可以使库存变更在一个变量上,并用锁机制避免超卖。
单例模式原理:
创建一个唯一的对象,并全局使用它,设置锁机制保证多线程安全。
单例模式实现:

class SingleObj{
    private static $instance = null;
    private  function __construct(){}
    //获取单例
    public static function getInstance()
    {
        //加锁,多线程安全
        $file = __FILE__.'.lock';
        $fp = fopen($file,'a');
        if(flock($fp,LOCK_EX)){
            if(!self::$instance){
                self::$instance = new SingleObj();
            }
            fclose($fp);
            unlink($file);
            return self::$instance;
        }
    }
}

猜你喜欢
C与PHP的联系与区别
阅读 383

联系: 1、PHP是C语言实现的一个应用软件,PHP的程序执行,最终也是调用C函数,很多时候,一些要优化性能的工作可以通过对PHP进行C扩展来实现。 区别: 0、PHP是面向对象语言,C是面向过程的函数过程式语言。 1、PHP是弱类型语言,使用变量时不需要申明类型,而且各种类型之间容易进行...

Laravel中的env函数获取不到确定存在的配置
阅读 521

今天重启服务器后发现网站有个报错,一看是获取配置出错,于是去检查配置,发现没问题,配置是正确的,于是想着换成getenv函数试试,还是不行,执行一遍composer install、composer update、composer dump-autoload还是无效,然后想起之前env配置不生效时...

Dockerfile 中 配置安装 php 扩展
阅读 710

以下配置实现了 在docker环境中安装scwl中文分词的php扩展: # scwl RUN curl 'http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2' -o scws-1.2.3.tar.bz2 \ &am...

PHP设计模式之工厂模式
阅读 322

工厂模式是一种隐藏类的实例化细节,并且对一系列类使用相同的实例化方式,可以很方便的扩展更多的实现同一个接口的类的创建对象的方式。 示例应用场景有: 1)在线支付 支付有多种方式,比如微信支付,支付宝支付,银联支付等,根据用户的选择而采用相应的支付方式; 2)访问量统计 在一个业务较复杂的...

laravel 使用事件系统统计浏览量
阅读 573

最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用laravel中的事件系统来做,在点击和访问对应的函数中产生这俩事件,监视器获取到之后,再将记录保存到数据库中,并更新计数。 1、在 app\Prov...

PHPmyadmin 和 MySQL 的配置笔记
阅读 324

配置MySQL: (直接下载msi文件或者exe文件安装的可直接看第 3 步) 基础配置: 1. 将安装包解压到根目录,如E:\mysql; 2. 进入mysql文件夹找到my-default.ini文件,并将文件名改为my.ini; 3.用记...

laravel-admin 在列表页添加自定义按钮
阅读 2225

为了添加自定义按钮,按官方文档分4步走: 1、先定义工具类app/Admin/Extensions/Tools/MyButton.php: <?php namespace App\Admin\Extensions\Tools; use Encore\Admin\A...

laravel-admin grid中使用switch操作一对一关联属性(源码探究到功能实现)
阅读 1600

项目中有一个商品表(production) ,有一个库存表(repertory),两者一对一关系,production有发布字段(release),需求是在repertory的grid中,有一个switch开关,用于发布production。 如果直接使用 grid−&a...