在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; } 这是只需要类的构造函数传入对应个数的参数即可。**/

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La raison de l'erreur est NameResolutionError(self.host,self,e)frome, qui est un type d'exception dans la bibliothèque urllib3. La raison de cette erreur est que la résolution DNS a échoué, c'est-à-dire le nom d'hôte ou l'adresse IP qui était. La tentative de résolution n'a pas pu être trouvée. Cela peut être dû au fait que l'adresse URL saisie est incorrecte ou que le serveur DNS est temporairement indisponible. Comment résoudre cette erreur Il peut y avoir plusieurs façons de résoudre cette erreur : Vérifiez si l'adresse URL saisie est correcte et assurez-vous qu'elle est accessible Assurez-vous que le serveur DNS est disponible, vous pouvez essayer d'utiliser la commande "ping" dans la ligne de commande pour tester si le serveur DNS est disponible Essayez d'accéder au site Web en utilisant l'adresse IP au lieu du nom d'hôte si vous êtes derrière un proxy

Lors de l'installation d'une nouvelle version d'une application, Windows peut afficher ce message d'erreur « Une erreur s'est produite lors de l'analyse de C:\\Windows\Microsoft.Net\Framework\v2.0.50727\Config\machine.configParser a renvoyé l'erreur 0xC00CE556 ». Ce problème se produit également au démarrage de votre système. Quelle que soit la situation dans laquelle vous rencontrez ce problème, .NETFramework est le véritable coupable en coulisses. Il existe des correctifs très simples que vous pouvez utiliser pour empêcher ce code d'erreur de réapparaître. Correctif 1 – Remplacer les fichiers corrompus Vous pouvez facilement remplacer le ma corrompu à partir du répertoire d'origine

Chaque année, avant qu'Apple ne publie une nouvelle version majeure d'iOS et de macOS, les utilisateurs peuvent télécharger la version bêta plusieurs mois à l'avance pour en faire l'expérience en premier. Étant donné que le logiciel est utilisé à la fois par le public et par les développeurs, Apple a lancé des versions développeur et publique, qui sont des versions bêta publiques des versions bêta développeur, pour les deux. Quelle est la différence entre la version développeur et la version publique d’iOS ? Littéralement parlant, la version développeur est une version bêta développeur et la version publique est une version bêta publique. La version développeur et la version publique ciblent des publics différents. La version développeur est utilisée par Apple pour les tests par les développeurs. Vous avez besoin d'un compte développeur Apple pour la télécharger et la mettre à niveau.

Avec le développement continu du langage PHP, ThinkPHP, largement utilisé dans le framework back-end PHP, s'améliore également constamment. À mesure que les scénarios commerciaux deviennent de plus en plus complexes, la demande en matière de gestion de configuration dans ThinkPHP augmente également. Dans ce contexte, ThinkPHP fournit de riches fonctions de gestion de configuration. Aujourd'hui, nous allons présenter comment implémenter la gestion de configuration via ThinkPHPConfig. 1. Introduction à ThinkPHPConfig ThinkPHPConfig est léger

Avant d'introduire l'utilisation de self en Python, introduisons d'abord les classes et les instances en Python. Nous savons que les concepts les plus importants de l'orientation objet sont les classes et les instances. Les classes sont des modèles abstraits, comme les étudiants. représenté par une classe d’étudiants. Les instances sont des « objets » spécifiques créés à partir de classes. Chaque objet hérite des mêmes méthodes de la classe, mais ses données peuvent être différentes. 1. Prenons l'exemple de la classe Student. En Python, la classe est définie comme suit : classStudent(object):pass(Object) indique de quelle classe la classe hérite.

1. Introduction à CodeIgniter CodeIgniter est un framework de développement PHP léger et complet conçu pour fournir aux développeurs Web des outils rapides et puissants pour créer des applications Web. Il s'agit d'un framework open source qui utilise le modèle d'architecture MVC pour réaliser un développement rapide et des fonctions de base, tout en prenant en charge une variété de bases de données. 2. Introduction à la bibliothèque Config La bibliothèque Config est un composant du framework CodeIgniter et est utilisée pour configurer et gérer le code. La bibliothèque Config contient de nombreux

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

Cet article vous aidera à interpréter le code source de Vue et à vous expliquer pourquoi vous pouvez l'utiliser pour accéder aux propriétés de diverses options de Vue2. J'espère qu'il sera utile à tout le monde !
