Heim Backend-Entwicklung PHP-Tutorial 在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");	}};
Nach dem Login kopieren


二、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;				}			}?>
Nach dem Login kopieren

总结:

/**	笔记:类名字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;				}				这是只需要类的构造函数传入对应个数的参数即可。**/
Nach dem Login kopieren


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Warum NameResolutionError(self.host, self, e) von e und wie man es löst Warum NameResolutionError(self.host, self, e) von e und wie man es löst Mar 01, 2024 pm 01:20 PM

Der Grund für den Fehler ist NameResolutionError(self.host,self,e)frome, ein Ausnahmetyp in der urllib3-Bibliothek. Der Grund für diesen Fehler ist, dass die DNS-Auflösung fehlgeschlagen ist, d. h. der Hostname oder die IP-Adresse Der Lösungsversuch konnte nicht gefunden werden. Dies kann daran liegen, dass die eingegebene URL-Adresse falsch ist oder der DNS-Server vorübergehend nicht verfügbar ist. So beheben Sie diesen Fehler Es gibt möglicherweise mehrere Möglichkeiten, diesen Fehler zu beheben: Überprüfen Sie, ob die eingegebene URL-Adresse korrekt ist und stellen Sie sicher, dass sie zugänglich ist. Stellen Sie sicher, dass der DNS-Server verfügbar ist. Sie können es mit dem Befehl „ping“ in der Befehlszeile versuchen Um zu testen, ob der DNS-Server verfügbar ist, versuchen Sie, über die IP-Adresse statt über den Hostnamen auf die Website zuzugreifen, wenn Sie sich hinter einem Proxy befinden

So beheben Sie den vom .NET-Parser zurückgegebenen Fehler 0xC00CE556 So beheben Sie den vom .NET-Parser zurückgegebenen Fehler 0xC00CE556 Apr 25, 2023 am 08:34 AM

Beim Installieren einer neuen Version einer Anwendung zeigt Windows möglicherweise die Fehlermeldung „Beim Parsen von C:\\Windows\Microsoft.Net\Framework\v2.0.50727\Config\machine.configParser ist ein Fehler aufgetreten“ an. Dieses Problem tritt auch beim Booten Ihres Systems auf. Unabhängig davon, in welcher Situation Sie auf dieses Problem stoßen, ist .NETFramework der wahre Übeltäter hinter den Kulissen. Es gibt einige sehr einfache Lösungen, mit denen Sie verhindern können, dass dieser Fehlercode erneut angezeigt wird. Fix 1 – Beschädigte Dateien ersetzen Sie können beschädigte Dateien ganz einfach aus dem Originalverzeichnis ersetzen

Was ist der Unterschied zwischen der Entwicklerversion und der öffentlichen Version von iOS? Was ist der Unterschied zwischen der Entwicklerversion und der öffentlichen Version von iOS? Mar 01, 2024 pm 12:55 PM

Jedes Jahr bevor Apple eine neue Hauptversion von iOS und macOS veröffentlicht, können Benutzer die Betaversion mehrere Monate im Voraus herunterladen, um sie zuerst zu testen. Da die Software sowohl von der Öffentlichkeit als auch von Entwicklern verwendet wird, hat Apple für beide Entwickler- und öffentliche Versionen herausgebracht, bei denen es sich um öffentliche Betaversionen der Entwickler-Betaversionen handelt. Was ist der Unterschied zwischen der Entwicklerversion und der öffentlichen Version von iOS? Im wahrsten Sinne des Wortes handelt es sich bei der Entwicklerversion um eine Entwickler-Betaversion und bei der öffentlichen Version um eine öffentliche Betaversion. Die Entwicklerversion und die öffentliche Version richten sich an unterschiedliche Zielgruppen. Die Entwicklerversion wird von Apple zum Testen durch Entwickler verwendet. Sie benötigen ein Apple-Entwicklerkonto, um sie herunterzuladen und zu aktualisieren.

Wie verwende ich ThinkPHP\Config für die Konfigurationsverwaltung in PHP? Wie verwende ich ThinkPHP\Config für die Konfigurationsverwaltung in PHP? May 31, 2023 pm 02:31 PM

Mit der kontinuierlichen Weiterentwicklung der PHP-Sprache wird auch ThinkPHP, das im PHP-Backend-Framework weit verbreitet ist, ständig verbessert. Da Geschäftsszenarien immer komplexer werden, steigt auch die Nachfrage nach Konfigurationsmanagement in ThinkPHP. In diesem Zusammenhang bietet ThinkPHP umfangreiche Konfigurationsverwaltungsfunktionen. Heute stellen wir vor, wie Sie das Konfigurationsmanagement über ThinkPHPConfig implementieren. 1. Einführung in ThinkPHPConfig ThinkPHPConfig ist Thin

So verwenden Sie self in Python So verwenden Sie self in Python May 17, 2023 pm 10:40 PM

Bevor wir die Verwendung von self in Python vorstellen, stellen wir zunächst die Klassen und Instanzen in Python vor. Wir wissen, dass Klassen und Instanzen abstrakte Vorlagen sein können vertreten durch eine Studentenklasse. Instanzen sind spezifische „Objekte“, die auf der Grundlage von Klassen erstellt werden. Jedes Objekt erbt dieselben Methoden von der Klasse, seine Daten können jedoch unterschiedlich sein. 1. Nehmen Sie die Klasse Student als Beispiel. In Python ist die Klasse wie folgt definiert: classStudent(object):pass(Object) gibt an, von welcher Klasse die Klasse erbt

Wie verwendet PHP CodeIgniter\Config für die Konfigurationsverwaltung? Wie verwendet PHP CodeIgniter\Config für die Konfigurationsverwaltung? Jun 02, 2023 pm 06:01 PM

1. Einführung in CodeIgniter CodeIgniter ist ein leichtes und umfassendes PHP-Entwicklungsframework, das Webentwicklern schnelle und leistungsstarke Tools zum Erstellen von Webanwendungen bietet. Es handelt sich um ein Open-Source-Framework, das das MVC-Architekturmuster nutzt, um eine schnelle Entwicklung und Grundfunktionen zu erreichen und gleichzeitig eine Vielzahl von Datenbanken zu unterstützen. 2. Einführung in die Config-Bibliothek Die Config-Bibliothek ist eine Komponente im CodeIgniter-Framework und wird zum Konfigurieren und Verwalten von Code verwendet. Die Config-Bibliothek enthält viele

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

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

Lassen Sie uns darüber sprechen, warum Vue2 dadurch in verschiedenen Optionen auf Eigenschaften zugreifen kann Lassen Sie uns darüber sprechen, warum Vue2 dadurch in verschiedenen Optionen auf Eigenschaften zugreifen kann Dec 08, 2022 pm 08:22 PM

Dieser Artikel hilft Ihnen bei der Interpretation des Vue-Quellcodes und stellt vor, warum Sie damit in Vue2 auf Eigenschaften in verschiedenen Optionen zugreifen können. Ich hoffe, dass er für alle hilfreich ist!

See all articles