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 出现乱码和Sessions验证问题的解决方法!
Dec 06 PHP
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
PHP 图片上传代码
Sep 13 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
深入php常用函数的使用汇总
Jun 08 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 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
Symfony页面的基本创建实例详解
2015/01/26 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
node.js require() 源码解读
2015/12/13 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中设置变量访问权限的方法
2015/04/27 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
python 二维数组90度旋转的方法
2019/01/28 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
python处理excel绘制雷达图
2019/10/18 Python
python实现控制台输出颜色
2021/03/02 Python
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
super()与this()的区别
2016/01/17 面试题
有关打架的检讨书
2014/01/25 职场文书
函授本科自我鉴定
2014/02/04 职场文书
工作违纪检讨书
2014/02/17 职场文书
安全标准化实施方案
2014/02/20 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
酒店员工培训方案
2014/06/02 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
班主任经验交流材料
2014/12/16 职场文书
给客户的感谢信
2015/01/21 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers