복붙노트

PHP 싱글 톤 수업에 대한 우수 사례 [duplicate]

PHP

PHP 싱글 톤 수업에 대한 우수 사례 [duplicate]

항상 모범 사례와 관련하여 글을 쓰지만, 주어진 사물이 왜 모범 사례인지 이해하고 싶습니다.

나는 싱글 톤 클래스가 정적 함수로 만들어지기보다는 인스턴스화되도록 선호되고 범위 분석 연산자 (: :)로 액세스한다는 기사에서 (불행히도 기억이 안나다) 읽었습니다. 따라서 모든 유효성 검사 도구가 포함 된 클래스가 있다면 간단히 말해서 :

class validate {
    private function __construct(){}
    public static function email($input){
        return true;
    }
}

나는 이것이 가비지 컬렉터 및 유지 보수와 같은 것들 때문에 나쁜 습관 (또는 최소한 경고)으로 간주된다고 들었다. 따라서 "정적 메서드 인 싱글 톤 클래스"에 대한 비판은 내가 한 번만 인스턴스화하게 될 100 % 확실한 클래스를 인스턴스화한다는 것입니다. 나에게 그것은 "이중 일"을하는 것처럼 보인다. 왜냐하면 그곳에 준비가되어 있기 때문이다. 내가 뭘 놓치고 있니?

이 문제에 대한 견해는 무엇입니까? 물론 그것은 삶과 죽음의 문제가 아니지만 옵션이 있다면 거기에 올바른 방법을 적용 할 수도 있습니다 :)

해결법

  1. ==============================

    1.PHP의 예제 싱글 톤 : PHP5에서 싱글 톤 디자인 패턴 만들기 : Ans 1 : PHP5에서 싱글 톤 디자인 패턴 만들기 : Ans 2 :

    PHP의 예제 싱글 톤 : PHP5에서 싱글 톤 디자인 패턴 만들기 : Ans 1 : PHP5에서 싱글 톤 디자인 패턴 만들기 : Ans 2 :

    싱글 톤은 "나쁜 습관"으로 간주됩니다.

    주로 이것 때문에 : PHP에서 레지스트리 패턴이나 싱글 톤을 테스트하는 것이 어떨까요?

    더 읽고 싶니? :

    싱글 톤 결정 다이어그램 (소스) :

  2. ==============================

    2.싱글 톤 객체는 한 번만 인스턴스화되는 객체입니다. 그것은 Singleton Pattern과 동일하지 않습니다. 이것은 (Anti-) Pattern으로 인스턴스화 될 수있는 클래스를 작성하는 방법입니다. Singleton (처음에는 큰 S) :

    싱글 톤 객체는 한 번만 인스턴스화되는 객체입니다. 그것은 Singleton Pattern과 동일하지 않습니다. 이것은 (Anti-) Pattern으로 인스턴스화 될 수있는 클래스를 작성하는 방법입니다. Singleton (처음에는 큰 S) :

    PHP와 관련하여 일반적으로 싱글 톤 패턴을 구현할 필요가 없습니다. 실제로 나쁜 습관이기 때문에 모범 사례를 요구할 때 그렇게하지 않아야합니다.

    또한 대부분의 PHP 코드 예제는 PHP 작동 방식을 무시한 패턴의 반 준비 구현입니다. 이러한 가짜 구현은 패턴의 "보장"과 일치하지 않습니다.

    이것은 또한 무엇인가를 알려줍니다. 종종 그것이 필요하지 않음을 나타냅니다. 부적절한 구현이 이미 패턴을 처리하지 못하는 경우에도 잘못된 패턴이 상황에 사용되면 안티 패턴이되기 시작합니다.

    PHP에서는 일반적으로 클래스에 단 하나의 인스턴스 만있는 것을 보장 할 필요가 없습니다. PHP 애플리케이션은 필요한 복잡하지 않습니다 (예 : 원자 인스턴스를 참조해야하는 다중 스레드가 없음).

    대부분의 PHP 개발자 (패턴)가 패턴을 사용하는 클래스 인스턴스에 대한 전역 액세스 지점이 종종 있습니다. 현재까지 알려진 바와 같이 이러한 "싱글 톤"을 사용하면 전역 정적 상태의 표준 문제가 발생하여 여러 수준에서 코드에 복잡성이 생기고 재사용 가능성이 감소합니다. 프로그래머는 유연한 방식으로 코드를 사용할 수있는 능력을 잃어 버리게됩니다. 그러나 유연성은 문제를 해결하는 매우 중요한 기술입니다. 그리고 프로그래머들은 하루 종일 문제를 해결하고 있습니다.

    따라서 디자인 패턴을 적용하기 전에 프로와 단점을 평가해야합니다. 단지 몇 가지 패턴을 자주 사용하는 것이 도움이되지 않습니다.

    처음에는 클래스를 작성하고 애플리케이션 논리의 다른 부분에서 어떻게 인스턴스화되었는지주의 깊게 처리하므로 유연하게 유지됩니다.

  3. ==============================

    3.글쎄, 이것은 실제로 싱글 톤이 아닙니다. 싱글 톤 (singleton)은 클래스의 단일 인스턴스 만 가질 수 있도록하며 여기에는 Validate의 단일 인스턴스를 검색하는 메소드가 없습니다. 여기서 귀하의 디자인은 정적 클래스 인 것으로 보입니다. 이것은 가비지 컬렉터 (적어도 여기에 배치 한 코드)에 문제를 일으키지 않습니다. 왜냐하면 이것이 무엇이든 상관없이 메모리에로드되기 때문입니다.

    글쎄, 이것은 실제로 싱글 톤이 아닙니다. 싱글 톤 (singleton)은 클래스의 단일 인스턴스 만 가질 수 있도록하며 여기에는 Validate의 단일 인스턴스를 검색하는 메소드가 없습니다. 여기서 귀하의 디자인은 정적 클래스 인 것으로 보입니다. 이것은 가비지 컬렉터 (적어도 여기에 배치 한 코드)에 문제를 일으키지 않습니다. 왜냐하면 이것이 무엇이든 상관없이 메모리에로드되기 때문입니다.

  4. from https://stackoverflow.com/questions/8776788/best-practice-on-php-singleton-classes by cc-by-sa and MIT license