首页 后端开发 php教程 在java跟php中,单例模式的区别

在java跟php中,单例模式的区别

Jun 13, 2016 am 11:51 AM
config public quot self this

在java和php中,单例模式的区别

在java和php中都会用到很多的单例模式,那么它们有什么区别呢?昨天晚上我相互对比了一下,就做了个小小的总结,然后写了个很小的java单例和php单例


一、java 单例

//完成对用户登录的简单验证操作class User{	private String name=null;//用户名	private String passwd=null;//密码	private static User ins = new User("这里可以传入常量,如“chunge”,此时构造函数要有对应形参。但是不支持在静态初始化函数中对它进行外部传递赋值");//单例实例对象	//初始化用户名密码的代码块	{		this.name="chunge";		this.passwd="111111";	}		//私有构造函数	private User(String n){		this.name=n;	}	//获取单例对象	public static User getIns(){		return ins;	}		//判断用户信息是否正确	public  void checkUserInfo(String name , String passwd ){		if(name==this.name && passwd==this.passwd){			System.out.println("欢迎您" + this.name);			System.exit(1);		}				//用户密码不匹配		System.out.println("非法登录");		System.exit(1);			}};public class oop{	public static void main(String args[]){		User U = User.getIns();//实例化对象		U.checkUserInfo("chunge","111111");	}};
登录后复制


二、php单例


<?php /**网站全局配置类**/	class Config{		private static $ins="";		private $config_file="";//配置文件		public $WEB_CONFIG=array();		//关闭初始化函数		private function __construct(){			//引入全局配置文件			require_once ROOT."config/global_config.php";			$this->config_file=ROOT."config/global_config.php";			//赋值			$this->WEB_CONFIG=$WEB_CONFIG;		}				//禁用克隆函数		private function __clone(){			return false;		}		//单例模式		public static function getIns(){			if(!(self::$ins instanceof self)){				//如果不存在				self::$ins=new self();						}			return self::$ins;		}				////动态输出配置信息		public function configGet($key){			if(array_key_exists($key,$this->WEB_CONFIG)){				return $this->WEB_CONFIG[$key];			}else{				echo "该配置信息不存在";				}					}		//动态添加配置信息传入键即可				public function configSet($key,$value){			//真正存入			$str=file_get_contents($this->config_file);			//var_dump($str);			$tmp=$this->configGet($key); 			$str=str_replace($tmp,$value,$str);			file_put_contents($this->config_file,$str);			//file_put_contents("ROOT1.php",$str);					}		////动态输出配置信息		public function __get($key){			if(array_key_exists($key,$this->WEB_CONFIG)){				return $this->WEB_CONFIG[$key];			}else{				echo "该配置信息不存在";				}					}		//动态添加配置信息				public function __set($key,$value){			//只是暂时的配置,未真正存入			$this->WEB_CONFIG[$key]=$value;				}			}?>
登录后复制

总结:

/**	笔记:类名字User  单例变量ins  		在java和php中,单例模式的区别		1.类可以进行单例模式,和php一样		2.java的单例模式变量声明:				private/public static 类名字 对象名字 = new 类名字();				例如:private static User ins = new User();//已经进行了new操作		  php的单例模式变量声明:				public/private static 对象名字=null;//只是声明,未进行new操作				例如:public static $ins = null;		3.java获得该单例对象方法			    public static 类名字 方法名字(){					return 刚刚定义的对象名字				}				例如: 				public static User getIns(){					return ins;//注意这里无法用this.但在php中,可以用self::获取				}		  php中获取该单例对象方法				public function getIns(){					if(self::$ins==null || (!self::$ins instanceof self)){						self::$ins=new self();					}					return self::$ins;				}		 4.在java中,单例模式如果初始化类中某些变量,因为其getIns()方法是静态的,如果变量不为静态的,则无法实例化该变量。即使构造函数需要传参,个人觉得可以直接用代码块     进行初始值的设置		   在php中,单例模式可以对起进行初始值的赋值,如				public function getIns($can1,$can2.......){					if(self::$ins==null || (!self::$ins instanceof self)){						self::$ins=new self($can1,$can2........);//.......代表不限个数					}					return self::$ins;				}				这是只需要类的构造函数传入对应个数的参数即可。**/
登录后复制


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

为什么NameResolutionError(self.host, self, e) from e,怎么解决 为什么NameResolutionError(self.host, self, e) from e,怎么解决 Mar 01, 2024 pm 01:20 PM

报错的原因NameResolutionError(self.host,self,e)frome是由urllib3库中的异常类型,这个错误的原因是DNS解析失败,也就是说,试图解析的主机名或IP地址无法找到。这可能是由于输入的URL地址不正确,或者DNS服务器暂时不可用导致的。如何解决解决此错误的方法可能有以下几种:检查输入的URL地址是否正确,确保它是可访问的确保DNS服务器可用,您可以尝试在命令行中使用"ping"命令来测试DNS服务器是否可用尝试使用IP地址而不是主机名来访问网站如果是在代理

如何修复 .NET 解析器返回的错误 0xC00CE556 如何修复 .NET 解析器返回的错误 0xC00CE556 Apr 25, 2023 am 08:34 AM

在安装应用程序的新版本时,Windows可能会显示此错误消息“解析C:\\Windows\Microsoft.Net\Framework\v2.0.50727\Config\machine.configParser返回错误0xC00CE556时出错”。当您的系统启动时,这个问题也会出现。无论您在何种情况下遇到此问题,.NETFramework都是幕后真正的罪魁祸首。您可以使用一些非常简单的修复程序来阻止此错误代码再次出现。修复1–替换损坏的文件您可以轻松地从原始目录中替换损坏的ma

iOS的developer版和public版有什么区别? iOS的developer版和public版有什么区别? Mar 01, 2024 pm 12:55 PM

每年Apple发布新的iOS和macOS大版本之前,用户都可以提前几个月下载测试版抢先体验一番。由于公众和开发人员都使用该软件,所以苹果公司为两者推出了developer和public版即开发者测试版的公共测试版。iOS的developer版和public版有什么区别呢?从字面上的意思来说,developer版是开发者测试版,public版是公共测试版。developer版和public版面向的对象不同。developer版是苹果公司给开发者测试使用的,需要苹果开发者帐号才可以收到下载并升级,是

Python中的self怎么使用 Python中的self怎么使用 May 17, 2023 pm 10:40 PM

在介绍Python的self用法之前,先来介绍下Python中的类和实例我们知道,面向对象最重要的概念就是类(class)和实例(instance),类是抽象的模板,比如学生这个抽象的事物,可以用一个Student类来表示。而实例是根据类创建出来的一个个具体的“对象”,每一个对象都从类中继承有相同的方法,但各自的数据可能不同。1、以Student类为例,在Python中,定义类如下:classStudent(object):pass(Object)表示该类从哪个类继承下来的,Object类是所有

php如何使用ThinkPHP\Config进行配置管理? php如何使用ThinkPHP\Config进行配置管理? May 31, 2023 pm 02:31 PM

随着PHP语言的不断发展,做为PHP后端框架中广泛使用的ThinkPHP也在不断完善。随着业务场景的逐渐复杂,ThinkPHP中对于配置管理的需求也越来越大。在这种背景下,ThinkPHP提供了丰富的配置管理功能,今天我们就来介绍一下如何通过ThinkPHPConfig实现配置管理。一、ThinkPHPConfig的介绍ThinkPHPConfig是Thin

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

php如何使用CodeIgniter\Config进行配置管理? php如何使用CodeIgniter\Config进行配置管理? Jun 02, 2023 pm 06:01 PM

一、CodeIgniter简介CodeIgniter是一个轻量级且全面的PHP开发框架,旨在为Web开发人员提供快速且强大的工具来构建Web应用程序。它是一个开源的框架,使用MVC架构模式来实现快速开发和基础功能,同时支持多种数据库。二、Config库简介Config库是CodeIgniter框架中的一个组件,用于对代码进行配置管理。Config库包含了很多

一篇搞懂this指向,赶超70%的前端人 一篇搞懂this指向,赶超70%的前端人 Sep 06, 2022 pm 05:03 PM

同事因为this指向的问题卡住的bug,vue2的this指向问题,使用了箭头函数,导致拿不到对应的props。当我给他介绍的时候他竟然不知道,随后也刻意的看了一下前端交流群,至今最起码还有70%以上的前端程序员搞不明白,今天给大家分享一下this指向,如果啥都没学会,请给我一个大嘴巴子。

See all articles