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 Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
非常实用的PHP常用函数汇总
Dec 17 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
PHP导入导出Excel代码
Jul 07 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 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
session 的生命周期是多长
2006/10/09 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
原生js实现随机点名
2020/07/05 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
python之Character string(实例讲解)
2017/09/25 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
python实现图片转字符小工具
2019/04/30 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
安德玛比利时官网:Under Armour比利时
2019/08/28 全球购物
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
投资入股协议书
2016/03/22 职场文书
Python 统计序列中元素的出现频度
2022/04/26 Python
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android