PHP 싱글톤 및 팩토리 패턴

不言
풀어 주다: 2023-03-24 12:00:01
원래의
1298명이 탐색했습니다.

이 글의 내용은 PHP 싱글톤과 팩토리 모드에 대한 내용입니다. 이제는 모든 사람과 공유합니다. 필요한 친구들이 참조할 수 있습니다.

팩토리 모드:

<?php
interface persion{
  public function say();
}

class man implements persion{
  public function say(){
     echo &#39;i am man&#39;;
  }
}

class factory{
  public static function createman(){
    return new man();
  }
}
$obj = factory::createman();
$obj->say();
로그인 후 복사

팩토리 모드, 이후에 자주 사용됩니다. man 클래스의 이름을 변경하려면 팩토리 클래스에서 createman 클래스의 내용만 변경하면 됩니다. 팩토리 모드에서는 실제로 클래스가 호출되는 위치 사이에 다른 레이어를 추가할 필요가 없습니다. 클래스가 호출되고 팩토리 클래스, 호출 주소가 팩토리 클래스를 직접 호출합니다

단일 케이스 모드:

단일 열 모드는 다음과 같이 데이터베이스에 연결되는 클래스에서 자주 사용됩니다.

<?php
class Database
{
    // 声明$instance为私有静态类型,用于保存当前类实例化后的对象
    private static $instance = null;
    // 数据库连接句柄
    private $db = null;

    // 构造方法声明为私有方法,禁止外部程序使用new实例化,只能在内部new
    private function __construct($config = array())
    {
        $dsn = sprintf(&#39;mysql:host=%s;dbname=%s&#39;, $config[&#39;db_host&#39;], $config[&#39;db_name&#39;]);
        $this->db = new PDO($dsn, $config[&#39;db_user&#39;], $config[&#39;db_pass&#39;]);
    }

    // 这是获取当前类对象的唯一方式
    public static function getInstance($config = array())
    {
        // 检查对象是否已经存在,不存在则实例化后保存到$instance属性
        if(self::$instance == null) {
            self::$instance = new self($config);
        }
        return self::$instance;
   }

    // 获取数据库句柄方法
    public function db()
    {
        return $this->db;
    }

    // 声明成私有方法,禁止克隆对象
    private function __clone(){}
    // 声明成私有方法,禁止重建对象
    private function __wakeup(){}
}

$config = array(
    &#39;db_name&#39; => &#39;test1&#39;,
    &#39;db_host&#39; => &#39;localhost&#39;,
    &#39;db_user&#39; => &#39;root&#39;,
    &#39;db_pass&#39; => &#39;&#39;
);
//获取数据库连接句柄
$obj = database::getInstance($config);
$db = $obj->db();
로그인 후 복사

간단한 이해 싱글톤 모드는 클래스의 생성자를 비공개 속성으로 만드는 것이므로 외부 직접 인스턴스화를 금지한 다음 정적 메서드를 생성하면 현재 클래스에 인스턴스화된 개체가 있는지 여부를 확인할 수 있습니다. 그런 다음 이를 클래스 속성에 할당하고 인스턴스화 개체가 있으면 직접 반환합니다. 이 인스턴스화된 개체

위 내용은 PHP 싱글톤 및 팩토리 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!