首頁 後端開發 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冒險:如何獲得巨型種子
3 週前 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) from e,怎麼解決

如何修復 .NET 解析器傳回的錯誤 0xC00CE556 如何修復 .NET 解析器傳回的錯誤 0xC00CE556 Apr 25, 2023 am 08:34 AM

如何修復 .NET 解析器傳回的錯誤 0xC00CE556

iOS的developer版和public版有什麼不同? iOS的developer版和public版有什麼不同? Mar 01, 2024 pm 12:55 PM

iOS的developer版和public版有什麼不同?

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

Python中的self怎麼使用

php如何使用ThinkPHP\Config進行組態管理? php如何使用ThinkPHP\Config進行組態管理? May 31, 2023 pm 02:31 PM

php如何使用ThinkPHP\Config進行組態管理?

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

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决

php如何使用CodeIgniter\Config進行組態管理? php如何使用CodeIgniter\Config進行組態管理? Jun 02, 2023 pm 06:01 PM

php如何使用CodeIgniter\Config進行組態管理?

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

一篇搞懂this指向,追趕70%的前端人

See all articles