Singleton Pattern – PHP Design Patterns

안녕 모두들! 이것은 http://wwweasylearntutorial

com을 가진 Rodrigo Silveira입니다 이 튜토리얼 넘버원은 공식적으로, 우리의 PHP 디자인 패턴 시리즈 우리가 이야기 할 첫 번째 패턴은 Singleton입니다 이것은 일부 사람들이 모든 디자인 패턴의 할아버지라고 생각합니다 이제부터 시작하겠습니다

싱글턴이 해결하는 문제 그것입니다 그것은 당신이 가질 수있게 해줍니다 하나의 클래스 인스턴스 귀하의 프로젝트 또는 귀하의 스크립트, 또는 무엇을 사용하고 있습니다 그래서 예를 들어 – 다른 말로 표현하자면, 계속하기 전에 싱글 톤은 아무것도 아닙니다 글로벌 변수라는 이름의 공상보다 더 좋은 것은 아닙니다

정말로 그게 전부입니다 DB와 같은 전역 변수를 가질 수 있습니다 그게 당신에게 당신이 데이터베이스 연결을위한거야 나는 * new *를 말하고 싶지 않기 때문에 그것의 새로운 인스턴스를 만들기 위해 적용됩니다 그러나 당신에게는 어떤 종류의 변수가 있습니다

데이터베이스에 연결하고 데이터베이스를 쿼리합니다 등등 그리고 나서 어디서든 스크립트를 당신은 앞을 내다 볼 수 있습니다 그리고 $ db-> 그것이 무엇이든 선택하십시오 이 변수는 당신을 위해 할 것입니다 그래서 싱글 톤은 모두 그렇지만 대신 클래스를 사용합니다

그래서 일종의 공상 그러나 그것을 명심하십시오 클래스의 전역 변수 우리는 싱글 톤에 대해 이야기하고 있습니다

거의 차이가 없다 어떤 사람들은 여기 내 주장을 공격 할 수도 있습니다 그러나 싱글 톤의 핵심은 그것이 당신에게주는 모든 것입니다 – 글로벌 상태! 그게 작동 방식 나는 PHP 클래스를 만들거야 그리고 나는 그저 데이터베이스를 호출하여 그 생각과 함께 우리가 할 일은 학생 결국 우리가 말하려고하는 우리 따옴표 어딘가에 $ db = new Database () 이 새 인스턴스가 있습니다 이제 이것이 싱글 톤이 아닌 일반 클래스라면, $ db2 = new Database ()와 같이 말할 수 있습니다

동일한 클래스의 다른 인스턴스를 생성 할 수 있습니다 문제는, 데이터베이스가 좋은 예입니다 좋은 유스 케이스를 만든다 필요하지 않거나 원하지 않는 수업 혹시 데이터베이스 연결과 같이 인스턴스가 두 개 이상 있습니다 너는 아마 하나 필요하다

전역 스크립트의 수명주기 그래서 싱글 톤 (Singletons)은 당신은 하나 이상의 인스턴스를 가지지 않을 것이다 이 PHP 클래스 그것이 작동하는 방식 그것입니다 너는 실제로 그것을 창조하는 것이 불가능하게 만든다 * new *를 사용하는 새로운 인스턴스 그래서 우리는 당신이 그들의 생성자를 생성하는 것을 어떻게합니까? 너는 그것을 사적인 것으로 만든다

그래서이 생성자가 무엇이든, 그건 사적이야 언제나 그렇게 부르려고 언제든지 스크립트를 실행하려고합니다 그것은이 거대한 예외를 던질 것입니다 "치명적인 오류 : Private Database :: _ construct ()"호출 이는 데이터베이스 클래스의 생성자가 private이기 때문입니다 그리고이 물건의 인스턴스를 실제로 만드는 방법 생성자가 잠겨있는 경우 당신은 상태를 정적으로 만듭니다 변하기 쉬운 그것은 당신의 클래스의 인스턴스입니다

대부분의 사람들이 단지 컨벤션 거리라는 이름을 지을 필요는 없습니다 그들의 명명 된 인스턴스 싱글 톤 "하나씩 일어나는 것" 그들은 그것의 이름을 짓는다 그냥 때문에 인스턴스 이 변수가 무엇을해야 하는지를 매우 간결하게 설명합니다 그리고 당신이하는 또 다른 일은 public static 함수를 만드는 것입니다

너를 위해 개체를 두 번 만들어라 이 함수는 보통 get 인스턴스라고 불린다 또는 get () 또는 create () 나는 그냥 getInstance ()라고 부를 것이다 이 경우 인수를 취하지 않습니다

이 기능은 무엇을 할 것인지, 수업의 범위에 속하기 때문에 학생들에게 개인 생성자 그래서 나는 할말이있다 (정적이기 때문에 $ this-> instance 만 말할 수는 없습니다) 그래서 너는 말해야 해 데이터베이스 :: $ intance = new Database () 이제 당신은 인스턴스화하다 좋은 것들 당신이 할 방법은 새로운 것을 부르는 대신 당신은 말할 것입니다 : $ db = Database :: getInstance () 우리가 이걸하기 위해 할 일은 그래서 당신은 일을 볼 수 있고, 우리는 함수를 만들 것입니다 같이있는 공공 기능 나는 단지 "public function query ()"라고 말할 것입니다 이처럼 가짜는 실제로 일부 데이터베이스를 쿼리합니다

그리고 이것은 "SELECT * FROM some_table"과 같은 것을 반환 할 것입니다 그럼 아마도 이걸 전화 할께 공용 함수 getQuery () 예 그래서 우리가 참으로이 클래스의 새로운 감각을 창조 할 수 있다면 이것이 작동한다면 이 함수는 실제로 일한다 우리가 새로 고침하면 물론 그는 어 우리가 실제로 돌아 오기 전에 이 인스턴스를 반환해야합니다 어

이렇게 새 인스턴스를 만들었습니다 우리가 돌아왔다 "return Database :: $ instance;" 우리가 누락 된 것 그래서 getInstance ()가 다음을 작성합니다

지금 이 기능이 스 크롤 된 경우 처음 생성되었습니다 $ instance가 null보다 큼 가치가 없다 그러나 우리가 getInstance ()를 호출 할 때, 그것은 새로운 것을 창조하고 우리는 그것을 돌려 보낼 것이다 이 전화는 여기에 있습니다

어 이 인스턴스를이 변수에 반환합니다 그래서 지금 우리가 페이지를 새로 고치면 물론, 실제로 작동합니다 – 지금 구현 한 코드에주의를 기울이면, 매번 스탠드를 가져 오는이 전화를 구현했습니다

그것은 실제로 새로운 인스턴스를 생성합니다 이 작업을 수행하는 데는 두 가지 방법이 있습니다 하나의 물결 내가 처음에 수업을 읽을 때 새로운 데이터베이스 이것도 효과가있다 어 어쩌면 일종의 실제로이 작업을 수행하는 두 가지 방법이 있습니다 그 중 하나는 지연 초기화라고하는 것을 의미합니다 당신은 그 인스턴스를 만들지 않는다 그는 그녀가 너에게 거짓말로 합류했다

내 사용자 너 geddes 체육관 전화 할 때까지 그리고 이것은 이것을하는 더 보편적 인 방법입니다 그리고 당신이하는 방식은 기본적으로 당신이 가지고있는 geddes 안에 있습니다 성명의 조건 이 섹스가 이미 민감하지 않은 경우 섹스 그리고 만약 당신이 그 세트를 사용하지 않는다면 어떻게할까요? 어 데이터베이스가 정적이어서 우리는 이렇게 해 아시아 인들 그래서 우리가하는 일은 이것이 인스턴스화 된 jens가 아닌 경우 설득하지 못했다

d_b_ 네가 조금했기 때문이다 우리가 돌려주는 사건 데이터 베이스 긴장과 그 다음에 전화에 그 심한 찢어진 거짓 그래서 우리는 여기서 뛰어 내린 새로운 목사를 만들지 않는다 그리고 이것이 단지 아직도 작동하고 있음을 증명하기 위해 사용 된 리턴 새롭게 하다 더 강하지 않다 어 우리가 할 수있는 한 가지 그 일을 할 때 두 부분으로 된 부분 집합입니다 GPS 그래서 그것을보기 위해 어 이게 t_b_와 하나의 아이디어가있다 그래서 우리가 할 수있는 것은 등급을 매겼습니다 역시 didi를 만들 수 있습니다 불렀다 그들은 입장을 반대하고있다

그리고 3 sgp했다 캐니스터 그래서 내가 보낸 계급의 세 자매가있는 추세 인 것처럼 보입니다 하지만 우리가 세 명 모두에게 힘든 시간을 보내면 3 및 2 보라 그것은 문장을 참조한다 스팬 점점 더 우리가 다른 씨족을 가진다면 그 사실을 부인하고 이 진짜 빠른 혐의 그냥 전화 할께 d_p_ 명사 그게 아무것도하지 않는 교실이야 어 보고서와 견습생 이 수업은 인도네시아어입니다 그리고 내가 뭘하려고하는지 그 싱글 톤을 부르는 대신 새로운 말을 할거야 t_b_는이 클래스를 유죄로합니다 이 클래스는 지금 생성자에게 말할 수있는 단일 센트가 아닙니다

은밀한 정적이지 않습니다 어 그냥 그렇게 그래서 지금 나는 3 개의 분리 된 인스턴스를 만들고있다

나는 맹세했다 나는 곧 보여주고 싶다 그래서 그것은 t_b_ 타입의 것을 보여줍니다 그러나이 작은 ita는 여기에 있습니다 시스는 다르다

다른 경우 인 경우 일 것입니다 그 자체가있다 어 일부는 메모리에있다 너도 알다시피 그들은 다르다 그걸 싱글 톤으로 증명하기 위해서 요 다른 상황에 우리는 참으로 하나만 창조했습니다

클래스의 인스턴스 다른 사람 테스트를받는 유스 케이스가 많을 때 유용 할 것입니다 어 공평한 생각을 갖고있는 사람은 여섯 명이 었는데 데이터베이스 시나리오 미시시피에 관한 약 음

도서관 네가 가지고 있지 않더라도 유틸리티 라이브러리가 있다면 그리고 내가 말하려는 것만 큼 모터 풀 어 그들 사본들 그러면 싱글 톤 안에 넣을 수 있고 필요할 때 항상 볼 수 있습니다 성가심을 얻으려면 실제는 강력한 정적 방법 인 장소 일뿐입니다 운 너는 단지 geddes의 신호를 부를 수있다 그리고 네가 기억에 자신감을 갖게 될거야 내가 말했듯이 한 번에 중요한 일 어떤 사람들은 성냥을하려고 노력한다 그것은 아무 문제가 없다는 것 이상의 아무것도 아닙니다 스탠드 솔루션 그들의 필요와 실제로 그것을 올바르게 사용하는 방법 어

세레나는 나는 짐작한다 어 직접 행동 그래서 여기에 코멘트 섹션에 모든 요구 사항을 넣으십시오 내가 말한 것에 동의하지 않으면 알렉 시아 여기에 대한 건강한 논쟁은 적다 그리고 어 이 비디오가 너무 꽉 차 있다면 반드시 구독하십시오 대단히 감사합니다