在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 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











오류의 원인은 urllib3 라이브러리의 예외 유형인 NameResolutionError(self.host,self,e)frome입니다. 이 오류의 원인은 DNS 확인에 실패했기 때문입니다. 해결을 찾을 수 없습니다. 이는 입력한 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의 새로운 주요 버전을 출시하기 전에 사용자는 몇 달 전에 베타 버전을 다운로드하여 먼저 경험할 수 있습니다. 소프트웨어는 대중과 개발자 모두가 사용하기 때문에 Apple은 개발자 베타 버전의 공개 베타 버전인 개발자 버전과 공개 버전을 모두 출시했습니다. iOS 개발자 버전과 공개 버전의 차이점은 무엇인가요? 말 그대로 개발자 버전은 개발자 베타 버전이고, 퍼블릭 버전은 퍼블릭 베타 버전이다. 개발자 버전과 공개 버전은 서로 다른 대상을 대상으로 합니다. 개발자 버전은 개발자가 테스트하기 위해 Apple에서 사용합니다. 다운로드하고 업그레이드하려면 Apple 개발자 계정이 필요합니다.

PHP 언어의 지속적인 발전에 따라 PHP 백엔드 프레임워크에서 널리 사용되는 ThinkPHP도 지속적으로 개선되고 있습니다. 비즈니스 시나리오가 점점 더 복잡해짐에 따라 ThinkPHP의 구성 관리에 대한 수요도 증가하고 있습니다. 이러한 맥락에서 ThinkPHP는 풍부한 구성 관리 기능을 제공합니다. 오늘은 ThinkPHPConfig를 통해 구성 관리를 구현하는 방법을 소개하겠습니다. 1. ThinkPHPConfig 소개 ThinkPHPConfig는 씬(Thin)입니다

Python에서 self의 사용법을 소개하기 전에 먼저 Python의 클래스와 인스턴스를 소개하겠습니다. 객체 지향의 가장 중요한 개념은 클래스와 인스턴스입니다. Student 클래스로 표현됩니다. 인스턴스는 클래스를 기반으로 생성된 특정 "객체"입니다. 각 객체는 클래스에서 동일한 메서드를 상속하지만 해당 데이터는 다를 수 있습니다. 1. Student 클래스를 예로 들어 보겠습니다. Python에서 클래스는 다음과 같이 정의됩니다. classStudent(object):pass(Object)는 클래스가 상속받는 클래스를 나타냅니다.

1. CodeIgniter 소개 CodeIgniter는 웹 애플리케이션을 구축하기 위한 빠르고 강력한 도구를 웹 개발자에게 제공하도록 설계된 가볍고 포괄적인 PHP 개발 프레임워크입니다. MVC 아키텍처 패턴을 사용하여 빠른 개발과 기본 기능을 구현하는 동시에 다양한 데이터베이스를 지원하는 오픈 소스 프레임워크입니다. 2. Config 라이브러리 소개 Config 라이브러리는 CodeIgniter 프레임워크의 구성 요소로 코드를 구성하고 관리하는 데 사용됩니다. 구성 라이브러리에는 많은 내용이 포함되어 있습니다.

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

이 글은 Vue 소스 코드를 해석하는 데 도움이 될 것이며 이를 사용하여 Vue2의 다양한 옵션에서 속성에 액세스할 수 있는 이유를 소개하는 것이 모든 사람에게 도움이 되기를 바랍니다!
