일반적으로 클래스와 객체(클래스 인스턴스) 사이에는 일대다 관계가 있습니다. 하지만
클래스 인스턴스가 하나만 필요한 경우도 있습니다. 예를 들어, 여러 인스턴스의 다양성으로 인해 제어할 수 없는 요소가 발생합니다. 여러 인스턴스화는 리소스를 낭비하고 효율성을 저하시킵니다. 또 다른 예는 시스템에서 다른 개체를 만드는 데 사용되는 팩토리 개체입니다. , 등. 이때 이를 처리하는 더 좋은 방법은
클래스의 인스턴스를 단일로 만드는 것입니다. 이 클래스가 작업 중에 최대 하나의 인스턴스를 생성하도록 하거나(싱글톤 모드
모드) 모든 인스턴스를 일관성 있게 만드는 것입니다( 모노스테이트 모드).
PHP에서 구현된 싱글톤 모드의 예:
<?php classSingleton { privatestatic$instance; privatefunction__construct() { } publicstaticfunctioninstance() { if(self::$instance==null) { self::$instance=newSingleton(); } returnself::$instance; } } ?>PHP에서 구현된 싱글톤에 대한 자세한 분석 PHP 패턴의 특징:
$instance=Singleton::instance(); // 这样是错误的: $instance = new Singleton();
1. 정적, 개인 속성: 인스턴스를 저장하는 데 사용됩니다. 정적은 클래스가 인스턴스화되지 않도록 하고
클래스 메서드에 의해 호출될 수도 있음을 보장합니다. 인스턴스화되지 않았습니다. 변경.
2. 비공개 생성자: 클래스는 이 클래스 외부에서 인스턴스화될 수 없습니다.
3. 정적 공개 메서드: 인스턴스를 생성하고 고유성을 보장합니다. static을 사용하면 인스턴스화되지 않고 메서드를 호출할 수 있습니다.
아래의 모노스테이트와 비교하여 장점은 다음과 같습니다.
2. 클래스가 주어지면 해당 클래스의 싱글톤 하위 클래스를 생성할 수 있습니다.
단점:
2. 사용이 불투명하므로 사용자는 싱글톤 클래스를 사용하며
new를 통해 인스턴스화할 수 없다는 점을 알아야 합니다.
Monostate 패턴의 기본 원칙은 Monostate 클래스의 모든 인스턴스가 동일한 인스턴스를 사용하도록 하는 것입니다
. 실제로 클래스의 모든 속성은 static으로 선언할 수 있습니다.
위는 PHP에서 Singleton 모드와 Monostate 모드를 구현한 내용입니다. 자세한 내용은 PHP 중국어 홈페이지를 참고해주세요. (www.php.cn)!
<?php classmonostate { privatestatic$itsX=0; publicfunction__construct() { } publicfunctionsetX($x) { self::$itsX=$x; } publicfunctiongetX() { returnself::$itsX; } } ?>