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新手上路(十一)
Oct 09 PHP
初品cakephp 入门基础
Feb 16 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
PHP.ini安全配置检测工具pcc简单介绍
Jul 02 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
Yii框架模拟组件调用注入示例
Nov 11 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 stripos()函数及注意事项的分析
2013/06/08 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
js类的静态属性和实例属性的理解
2009/10/01 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
JS实现关闭当前页而不弹出提示框的方法
2016/06/22 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
Python中取整的几种方法小结
2017/01/06 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
python支持多线程的爬虫实例
2019/12/21 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
总经理岗位职责
2013/11/09 职场文书
实习单位评语
2014/04/26 职场文书
2014年保密工作总结
2014/11/22 职场文书
教师节表彰会主持词
2015/07/06 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android