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 相关文章推荐
PHPMailer发送HTML内容、带附件的邮件实例
Jul 01 PHP
PHP 读取和编写 XML
Nov 19 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
php将html转为图片的实现方法
May 19 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
浅谈php调用python文件
Mar 29 PHP
浅谈laravel数据库查询返回的数据形式
Oct 21 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
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
js获取变量
2006/08/24 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
js中url对象化管理分析
2017/12/29 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python计算时间差的方法
2015/05/20 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
Python中Qslider控件实操详解
2021/02/20 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
营销与策划个人求职信
2013/09/22 职场文书
2014年图书室工作总结
2014/12/09 职场文书
董事长岗位职责
2015/02/13 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
运动会3000米加油稿
2015/07/21 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
MySQL七种JOIN类型小结
2021/10/24 MySQL
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python