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 相关文章推荐
Blitz templates 最快的PHP模板引擎
Apr 06 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
ThinkPHP单字母函数(快捷方法)使用总结
Jul 23 PHP
PHP基本语法总结
Sep 06 PHP
ThinkPHP独立分组使用的注意事项
Nov 25 PHP
完美的php分页类
Oct 24 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 PHP
YII框架行为behaviors用法示例
Apr 26 PHP
thinkphp5修改view到根目录实例方法
Jul 02 PHP
php的优点总结 php有哪些优点
Jul 19 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
?繁体转换的class
2006/10/09 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
js脚本实现数据去重
2014/11/27 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
python发腾讯微博代码分享
2014/01/10 Python
python实现代码行数统计示例分享
2014/02/10 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
python抓取最新博客内容并生成Rss
2015/05/17 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
python实现同一局域网下传输图片
2020/03/20 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
override和overload的区别
2016/03/09 面试题
庆七一活动方案
2014/01/25 职场文书
五年级数学教学反思
2014/02/11 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书