PHP单例模式实例分析【防继承,防克隆操作】


Posted in PHP onMay 22, 2019

本文实例讲述了PHP单例模式。分享给大家供大家参考,具体如下:

<?php
//单列模式
// //1.普通类
// class singleton{
// }
// $s1 = new singleton();
// $s2 = new singleton();
// //注意,2个变量是同1个对象的时候才全等
// if ($s1 === $s2) {
//   echo '是一个对象';
// }else{
//   echo '不是一个对象';
// }
// //2.封锁new操作
// class singleton{
//   protected function __construct(){}
// }
// $s1 = new singleton();//PHP Fatal error: Call to protected singleton::__construct()
// //3.留个接口来new对象
// class singleton{
//   protected function __construct(){}
//   public static function getIns(){
//     return new self();
//   }
// }
// $s1 = singleton::getIns();
// $s2 = singleton::getIns();
// if ($s1 === $s2) {
//   echo '是一个对象';
// }else{
//   echo '不是一个对象';
// }
// //4.getIns先判断实例
// class singleton{
//   protected static $ins = null;
//   private function __construct(){}
//   public static function getIns(){
//     if (self::$ins === null) {
//       self::$ins = new self();
//     }
//     return self::$ins;
//   }
// }
// $s1 = singleton::getIns();
// $s2 = singleton::getIns();
// if ($s1 === $s2) {
//   echo '是一个对象';
// }else{
//   echo '不是一个对象';
// }
// //继承
// class A extends singleton{
//   public function __construct(){}
// }
// echo '<br>';
// $s1 = new A();
// $s2 = new A();
// if ($s1 === $s2) {
//   echo '是同一个对象';
// }else{
//   echo '不是同一个对象';
// }
// //5.防止继承时被修改了权限
// class singleton{
//   protected static $ins = null;
//   //方法加final则方法不能被覆盖,类加final则类不能被继承
//   final private function __construct(){}
//   public static function getIns(){
//     if (self::$ins === null) {
//       self::$ins = new self();
//     }
//     return self::$ins;
//   }
// }
// $s1 = singleton::getIns();
// $s2 = singleton::getIns();
// if ($s1 === $s2) {
//   echo '是同一个对象';
// }else{
//   echo '不是同一个对象';
// }
// //继承
// // class A extends singleton{
// //   public function __construct(){}
// // }
// //Cannot override final method singleton::__construct()
// echo '<hr>';
// $s1 = singleton::getIns();
// $s2 = clone $s1;
// if ($s1 === $s2) {
//   echo '是同一个对象';
// }else{
//   echo '不是同一个对象';
// }
//6.防止被clone
class singleton{
  protected static $ins = null;
  //方法加final则方法不能被覆盖,类加final则类不能被继承
  final private function __construct(){}
  public static function getIns(){
    if (self::$ins === null) {
      self::$ins = new self();
    }
    return self::$ins;
  }
  // 封锁clone
  final private function __clone(){}
}
$s1 = singleton::getIns();
$s2 = clone $s1; //Call to private singleton::__clone() from context
if ($s1 === $s2) {
  echo '是同一个对象';
}else{
  echo '不是同一个对象';
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用php+mysql一个名片库程序
Oct 09 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
php内核解析:PHP中的哈希表
Jan 30 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
开启PHP的伪静态模式
Dec 31 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
Feb 17 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php-msf源码详解
Dec 25 PHP
php查询内存信息操作示例
May 09 PHP
Laravel框架之解决前端显示图片问题
Oct 24 PHP
在Laravel5中正确设置文件权限的方法
May 22 #PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 #PHP
thinkphp5框架API token身份验证功能示例
May 21 #PHP
php curl操作API接口类完整示例
May 21 #PHP
PHP钩子实现方法解析
May 21 #PHP
php面向对象程序设计中self与static的区别分析
May 21 #PHP
PHP经典设计模式之依赖注入定义与用法详解
May 21 #PHP
You might like
php 静态变量的初始化
2009/11/15 PHP
初识php MVC
2014/09/10 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
js模拟微博发布消息
2017/02/23 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
django queryset相加和筛选教程
2020/05/18 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
初一体育教学反思
2014/01/29 职场文书
幼师自我鉴定
2014/02/01 职场文书
委托书的写法
2014/08/30 职场文书
怎么写工作检讨书
2014/11/16 职场文书
校长一岗双责责任书
2015/05/09 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android
Redis基本数据类型String常用操作命令
2022/06/01 Redis
Redis主从复制操作和配置详情
2022/09/23 Redis