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实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
PHP自动生成后台导航网址的最佳方法
Aug 27 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
PHP 芝麻信用接入的注意事项
Dec 01 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 PHP
PHP7 list() 函数修改
Mar 09 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
PHP5 字符串处理函数大全
2010/03/23 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
joomla数据库操作示例代码
2016/01/06 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
vue实现放大镜效果
2020/09/17 Javascript
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Python实现井字棋小游戏
2020/03/09 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
Python 如何展开嵌套的序列
2020/08/01 Python
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
白酒市场开发计划书
2014/01/09 职场文书
优良学风班总结材料
2014/02/08 职场文书
客服专员岗位职责
2014/02/28 职场文书
开工仪式主持词
2014/03/20 职场文书
养成教育工作总结
2015/08/13 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS