Maison  >  Article  >  développement back-end  >  PHP singleton et modèle d'usine

PHP singleton et modèle d'usine

不言
不言original
2018-04-19 14:21:081287parcourir

Le contenu de cet article concerne le mode PHP singleton et usine. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Mode usine :

<?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();
Mode Factory, ce qui est souvent utilisé est de changer le nom de la classe man. Il vous suffit de modifier le contenu de la classe createman dans la classe factory. Il n'est pas nécessaire de changer les autres endroits où la classe est appelée. .Le mode usine est en fait appelé à nouveau.Une autre couche de classe usine est ajoutée entre la classe et la classe. L'adresse appelante appelle directement la classe usine

Mode Singleton :

Le mode colonne unique est. souvent utilisé pour se connecter à la classe de base de données, comme :

<?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();
Une compréhension simple du mode singleton consiste à faire du constructeur de la classe une propriété privée, afin que l'instanciation externe directe puisse être interdite, et puis créez une méthode statique pour déterminer si la classe actuelle a instancié l'objet. Sinon, instanciez-le lui-même, puis attribuez-le à un attribut de classe et renvoyez-le s'il y a une instanciation, renvoyez directement l'objet instancié

<.>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn