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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
php中session过期时间设置及session回收机制介绍
May 05 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
php+xml实现在线英文词典之添加词条的方法
Jan 23 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
php处理静态页面:页面设置缓存时间实例
Jun 22 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 PHP
PHP解决高并发问题
Apr 01 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
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python返回数组/List长度的实例
2018/06/23 Python
详解Python中的type和object
2018/08/15 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
python try...finally...的实现方法
2020/11/25 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
Brasty罗马尼亚:购买手表、香水、化妆品、珠宝
2020/04/21 全球购物
销售员岗位职责范本
2014/02/03 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书