이 기사의 예에서는 PHP 디자인 패턴의 싱글톤 모드를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
싱글톤 모드(책임 모드):
간단히 말하면 객체(디자인 패턴을 배우기 전에 객체지향적 사고를 이해해야 함)는 특정 작업만 담당합니다.
싱글톤 클래스:
1. 생성자는 비공개로 표시되어야 합니다(액세스 제어: 외부 코드가 객체를 생성하기 위해 new 연산자를 사용하는 것을 방지). 싱글톤 클래스는 다른 클래스에서 인스턴스화될 수 없으며 자체적으로만 인스턴스화될 수 있습니다.
2.
클래스의 인스턴스를 보유하는 정적 멤버 변수를 갖습니다.
3. 이 인스턴스에 액세스하기 위한 공용 정적 메소드를 갖습니다. (getInstance() 메소드는 일반적으로 싱글톤 클래스를 인스턴스화하는 데 사용되며, instanceof 연산자는 클래스가 인스턴스화되었는지 감지하는 데 사용할 수 있습니다.)
PHP 싱글턴 패턴을 사용하는 이유는 무엇인가요?
1. PHP는 주로 데이터베이스 애플리케이션에 사용되므로 애플리케이션에서 많은 수의 데이터베이스 작업이 발생합니다. 싱글톤 모드를 사용하면 새로운 작업에 많은 리소스가 소비되는 것을 피할 수 있습니다.
2. 특정 구성 정보를 전역적으로 제어하기 위해 시스템에 클래스가 필요한 경우 싱글톤 모드를 사용하여 쉽게 구현할 수 있습니다. 이는 ZF의 FrontController 섹션에서 찾을 수 있습니다.
3. 페이지 요청에서는 모든 코드(예: 데이터베이스 작업 클래스 db)가 하나의 클래스에 집중되어 있기 때문에 디버깅하기 쉽습니다. 클래스에 후크를 설정하고 로그를 출력하여 모든 곳에서 var_dump 및 echo를 방지할 수 있습니다.
코드 구현:
<?php /1** * 设计模式之单例模式 * $_instance必须声明为静态的私有变量 * 构造函数和析构函数必须声明为私有,防止外部程序new * 类从而失去单例模式的意义 * getInstance()方法必须设置为公有的,必须调用此方法 * 以返回实例的一个引用 * ::操作符只能访问静态变量和静态函数 * new对象都会消耗内存 * 使用场景:最常用的地方是数据库连接。 * 使用单例模式生成一个对象后, * 该对象可以被其它众多对象所使用。 */ class Danli { //保存类实例的静态成员变量 private static $_instance; //private标记的构造方法 private function __construct(){ echo 'This is a Constructed method;'; } //创建__clone方法防止对象被复制克隆 public function __clone(){ trigger_error('Clone is not allow!',E_USER_ERROR); } //单例方法,用于访问实例的公共的静态方法 public static function getInstance(){ if(!(self::$_instance instanceof self)){ self::$_instance = new self; } return self::$_instance; } public function test(){ echo '调用方法成功'; } } //用new实例化private标记构造函数的类会报错 //$danli = new Danli(); //正确方法,用双冒号::操作符访问静态方法获取实例 $danli = Danli::getInstance(); $danli->test(); //复制(克隆)对象将导致一个E_USER_ERROR $danli_clone = clone $danli;