在java跟php中,单例模式的区别
在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 /**网站全局配置类**/ 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; } 这是只需要类的构造函数传入对应个数的参数即可。**/

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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

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

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