>백엔드 개발 >PHP 튜토리얼 >PHP 데이터베이스 액세스에 싱글톤이 정말 필요한가요?

PHP 데이터베이스 액세스에 싱글톤이 정말 필요한가요?

Patricia Arquette
Patricia Arquette원래의
2024-12-22 22:40:11283검색

Are Singletons Really Necessary for PHP Database Access?

싱글턴: PHP 데이터베이스 액세스에 대한 신화

다음과 같은 단순화된 싱글턴을 고려하여 PHP 데이터베이스 액세스에 싱글턴이 필요한지 의문을 제기하고 계십니다. class:

class Database {
    private static $db;

    private function __construct(){}

    static function get() {
        if(!isset(self::$db))
            self::$db = new PDO(...);

        return self::$db;
    }
}

왜 더 많은 것 대신에 이것이 충분하지 않은지 궁금합니다. 싱글톤() 메서드를 사용하는 복잡한 싱글톤 클래스.

PHP에서 싱글톤의 유용성 폭로

PHP에서 싱글톤은 장점이 거의 없거나 전혀 없습니다.

  • 메모리 보존: 싱글톤은 메모리 사용량을 다음과 같이 줄이는 것을 목표로 합니다. 공유 메모리에서 인스턴스를 공유합니다. 그러나 PHP에서는 개체가 개인 요청 메모리에 상주하므로 이 목적이 부적절해집니다.
  • 싱글톤 적용: 개념적 싱글톤에는 적용을 위한 언어 메커니즘이 필요하지 않을 수 있습니다. 두 번째 인스턴스를 생성할 때 싱글톤만 고려하면 해로운 효과가 발생할 수 있습니다.

싱글톤의 단점

  • 전역 결합: 싱글톤 전역 범위 종속성을 도입하여 테스트를 복잡하게 만들고
  • 종속성 주입 대안: 여러 클래스에 걸쳐 단일 인스턴스가 필요한 경우 종속성 주입은 더욱 명확하고 테스트 가능한 솔루션을 제공합니다.

에리히 감마의 회의주의

싱글톤 패턴인 Erich Gamma는 이제 그 유용성에 의문을 제기합니다.

  • "나는 싱글톤을 삭제하는 데 찬성합니다. 그 사용은 거의 항상 디자인 냄새입니다."

싱글턴이 있을 때 적용 가능

PHP의 싱글톤에 대한 일반적인 회의론에도 불구하고 다음 시나리오를 고려하십시오.

  • 글로벌 액세스 포인트: 인스턴스에 대한 글로벌 액세스 포인트 생성 동일한 요청 내에서 정당화될 수 있지만 결합 및 유지 관리가 도입될 수 있습니다.
  • 두 번째 인스턴스 제거: 추가 인스턴스가 생성되는 것을 방지해야 하는 절실한 경우에만 싱글톤을 구현하세요.

추가 리소스

  • [PHP에서 싱글톤 테스트: 왜? 까다롭습니다](link_to_How_is_testing_the_registry_pattern_or_singleton_hard_in_PHP)
  • [싱글톤 데이터베이스의 단점 클래스](link_to_What_are_the_disadvantages_of_using_a_PHP_database_class_as_a_singleton)
  • [싱글턴 결정 다이어그램](link_to_Singleton_Decision_Diagram)

위 내용은 PHP 데이터베이스 액세스에 싱글톤이 정말 필요한가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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