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
实现“上一页”和“下一页按钮
Oct 09 PHP
动态生成gif格式的图像要注意?
Oct 09 PHP
PHP 魔术函数使用说明
May 14 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
php数组查找函数总结
Nov 18 PHP
深入php内核之php in array
Nov 10 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 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根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
javascript instanceof,typeof的区别
2010/03/24 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
JavaScript实现通讯录功能
2020/12/27 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
Django url 路由匹配过程详解
2021/01/22 Python
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
浪费资源的建议书
2014/03/12 职场文书
婚礼主持词开场白
2014/03/13 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
幼儿园安全责任书
2014/04/14 职场文书
2014最新离职证明范本
2014/09/12 职场文书
自我工作评价范文
2015/03/06 职场文书
话题作文之呼唤
2019/12/18 职场文书
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL