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操作MongoDB时的整数问题及对策说明
May 02 PHP
php&amp;mysql 日期操作小记
Feb 27 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
php中怎么搜索相关联数组键值及获取之
Oct 17 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
php中$_GET与$_POST过滤sql注入的方法
Nov 03 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
PHP基于swoole多进程操作示例
Aug 12 PHP
laravel中的fillable和guarded属性详解
Oct 23 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/10/09 PHP
php连接mssql数据库的几种方法
2013/02/21 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
Prototype Number对象 学习
2009/07/19 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
详解Vue之父子组件传值
2019/04/01 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
深入了解js原型模式
2019/05/30 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
Python heapq使用详解及实例代码
2017/01/25 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
使用Python pip怎么升级pip
2020/08/11 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
新学期决心书
2014/03/11 职场文书
十岁生日答谢词
2015/01/05 职场文书
学校百日安全活动总结
2015/05/07 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
居住证明范文
2015/06/17 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
golang内置函数len的小技巧
2021/07/25 Golang
15个值得收藏的JavaScript函数
2021/09/15 Javascript
Window server中安装Redis的超详细教程
2021/11/17 Redis