>  기사  >  백엔드 개발  >  PHP 패턴 디자인 싱글톤 패턴

PHP 패턴 디자인 싱글톤 패턴

WBOY
WBOY원래의
2016-07-30 13:30:291192검색

패턴디자인이란? 초보자들은 처음에는 이 고상한 이름에 겁을 먹게 될 것입니다. 프로그래밍 경험이 풍부한 베테랑에게 패턴 디자인은 어디에나 있습니다. 많은 접촉 프레임워크는 다양한 패턴을 기반으로 설계되었습니다. 간단히 말해서, 코드를 작성하는 과정에서 처음 접하게 되는 것은 프로세스 지향적이고 단순하며 기본적인 프로그래밍입니다. 이때 우리가 자주 추구하는 것은 코드가 특정 기능을 달성할 수 있으면 모든 것이 잘 될 것이라는 것입니다. 코드가 얼마나 중복되는지, 재사용이 가능한지, 얼마나 효율적인지는 중요하지 않습니다. 코드가 기능을 달성할 수 있다면 말이죠. 그러나 실제로 실제로 적용되고 모든 사람이 더 많이 채택하는 것은 팀 개발에 효율적이고 재사용이 가능하며 쉬운 코드입니다. 이러한 요소를 바탕으로 연습하듯이 그냥 함수 이름을 지정하고 스크립트를 배치할 수는 없습니다. 패턴 디자인 지침은 사람들이 코드를 구성하고, 재사용 가능한 코드를 얻고, 다른 사람이 코드를 더 쉽게 이해할 수 있도록 만들고, 코드 신뢰성을 보장할 수 있는 아이디어를 제공합니다.

모든 패턴 디자인에는 싱글턴 패턴, 팩토리 패턴, 등록 트리 패턴 3가지 기본 디자인 패턴이 있는데, 오늘은 이 패턴을 기반으로 하는 경우가 많습니다.

싱글턴 패턴이란 무엇인가요?

이 이름을 보면 싱글톤 패턴은 전체 애플리케이션에서 객체 인스턴스가 하나만 존재하는 디자인 패턴을 의미한다는 것을 쉽게 이해할 수 있습니다.

싱글턴 패턴을 사용하는 이유는 무엇인가요?

PHP는 종종 데이터베이스를 다루며, 애플리케이션에서 연결 개체를 자주 설정하고 새로운 작업을 수행하면 많은 양의 시스템 메모리 리소스가 소모됩니다. 우리가 보고 싶은 것이 아닙니다. 또한 팀 협력 프로젝트에서 싱글톤 모드는 서로 다른 프로그래머가 자신의 개체를 새로 작성하여 인위적인 시스템 소비를 유발하는 것을 효과적으로 방지할 수 있습니다.

싱글톤 모드는 어떻게 설정하나요?

이 문제를 보면 훌륭한 프로그래머라면 선배들의 경험을 기다리기보다는 요구사항에 맞춰 싱글톤 패턴을 만들어내려고 노력할 가능성이 높다고 생각합니다. 싱글턴 패턴이 어떤 패턴인지 알려주는 다른 블로거들과 달리, 저는 객체지향 프로그래밍에 대한 기본적인 경험이 있는 여러분과 함께 어떻게 싱글턴 패턴을 직접 구축할지 고민해 보는 것을 선호합니다.

먼저 제목부터 살펴보겠습니다. 싱글턴 패턴은 객체 인스턴스가 하나만 있는 디자인 패턴입니다. 이것은 매우 고통스럽습니다. 우리가 일반적으로 만드는 클래스는 많은 객체를 생성할 수도 있고 객체를 생성할 수 없는 경우도 있습니다(추상 클래스). 객체를 생성하려면 클래스가 필요하며 추상 클래스일 수 없습니다. 이 클래스는 다른 사람이 함수를 여러 번 생성하는 것을 방지하기 위한 것입니다. 우리는 자연스럽게 생성자부터 시작하는 것을 고려했습니다. 그러나 각각의 새로운 작업은 생성자를 호출하므로 객체 인스턴스가 여러 번 생성됩니다. 이는 우리의 원래 디자인 의도에 어긋납니다. 이 문제를 해결하려면 여기에서 생성자를 private 또는 protected로 선언해야 합니다.

생성자가 private 또는 protected로 선언되면 new 메소드를 통해 인스턴스 객체를 생성할 수 없게 됩니다. 그리고 우리는 이 처리 단계 후에 문제 해결에 대한 전망이 분명해졌음을 발견했습니다. 왜? new 메소드를 통해서는 객체 인스턴스를 생성할 수 없기 때문에 클래스 내의 메소드를 통해서만 객체 인스턴스를 생성할 수 있습니다. 이때 우리는 흥미로운 닭이냐 달걀이냐의 문제에 직면하게 됩니다. 우리는 객체를 생성한 후 객체의 메소드를 호출하는 경우가 많습니다. 이때 객체를 생성하기 위해서는 클래스 내에서 메소드를 호출해야 합니다. 객체 생성 여부에 관계없이 호출할 수 있는 메서드에 대한 솔루션은 의심할 여지 없이 --static 키워드를 사용하는 것입니다.

클래스 내에서 정적 메서드를 생성하면 무엇을 할 수 있나요? 주제로 돌아가기: 인스턴스 개체를 하나만 생성해야 합니다. 하나만 있는지 확인하는 방법은 무엇입니까? 이것은 매우 간단합니다. 판단해 보세요. 존재하는 경우 직접 반환하고, 존재하지 않는 경우 직접 생성하세요. 물론 이 인스턴스 객체는 클래스의 정적 속성입니다. 이 시점에서는 싱글톤 모드에서 필요한 기능이 구현됩니다. 정말 완성됐나요? 아직은요~ 이 클래스를 상속받는다면 생성자를 public으로 선언하는 것도 나쁘지 않겠죠? 그런 다음 생성자 메서드 앞에 final 키워드를 추가해야 합니다.

마지막으로 싱글톤 모드 코드를 붙여넣으면 코드 설명은 모두 위와 같습니다~~

<?<span>php
</span><span>class</span><span> Single{
    </span><span>public</span><span>$hash</span><span>;
    </span><span>static</span><span>protected</span><span>$ins</span>=<span>null</span><span>;
    </span><span>final</span><span>protected</span><span>function</span><span> __construct(){
        </span><span>$this</span>->hash=<span>rand</span>(1,9999<span>);
    }

    </span><span>static</span><span>public</span><span>function</span><span> getInstance(){
        </span><span>if</span> (self::<span>$ins</span><span> instanceof self) {
            </span><span>return</span> self::<span>$ins</span><span>;
        }
        self</span>::<span>$ins</span>=<span>new</span><span> self();
        </span><span>return</span> self::<span>$ins</span><span>;
    } 
}</span>

싱글톤 모드 자체는 복잡하지 않지만, -깊이 있는 이해. 많은 초보자들이 여전히 한숨을 쉬고 있습니다. 젠장, 생성자가 항상 public인 것은 아닙니다~ 젠장, new를 사용하지 않고도 객체를 생성할 수 있습니다~ 사실 저자는 생성자가 public, private 또는 protected로 선언되든 관계없이 생성자가 생성된다고 말하고 싶습니다. 객체는 궁극적으로 생성될 때마다 호출됩니다. New는 항상 객체 인스턴스를 생성하는 데 사용됩니다. 싱글톤 모드도 new를 사용하여 객체를 생성하지만 위치만 클래스 외부에서 클래스 내부로 변경합니다.

마지막으로 다양하고 정교한 패턴 디자인을 개발해주신 프로그래머분들께 존경의 말씀 전하고 싶습니다~~

위 내용은 PHP 모드 디자인의 싱글턴 모드에 대한 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.