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的header和asp中的redirect比较
Oct 09 PHP
建立动态的WML站点(一)
Oct 09 PHP
PHP语法速查表
Dec 06 PHP
PHP 学习路线与时间表
Feb 21 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
yii的CURD操作实例详解
Dec 04 PHP
迁移PHP版本到PHP7
Feb 06 PHP
php实现购物车功能(上)
Jul 23 PHP
php自动提交表单的方法(基于fsockopen与curl)
May 09 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 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程序?
2006/12/08 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
jquery文字上下滚动的实现方法
2013/03/22 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python Socket编程入门教程
2014/07/11 Python
python对数组进行反转的方法
2015/05/20 Python
Python读取键盘输入的2种方法
2015/06/16 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
Python 如何测试文件是否存在
2020/07/31 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
合伙协议书范本
2014/04/21 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
企业党员个人自我评价
2014/09/20 职场文书