1.单例模式
单例模式只要是用于频繁实例化销毁的类,减小资源的浪费:单例模式的特点
- 1、单例类只能有一个实例。
- 2、单例类必须自己创建自己的唯一实例。
- 3、单例类必须给所有其他对象提供这一实例。
单例模式的经典例子就是数据库的应用,由于数据库操作频繁,利用单例模式是的数据库类只实例化一次,减少资源浪费。
<?php namespace Data; class Database { private static $con; private $link; private function __construct($host, $user, $pwd, $db) { // TODO: Implement connect() method. try{ $con = new \mysqli($host, $user, $pwd, $db); $con->set_charset('utf-8'); return $this->link=$con; } catch (\Exception $e) { echo $e->getMessage(); } } static function getInstance($host, $user, $pwd, $db) { if( !self::$con ) { self::$con = new self($host, $user, $pwd, $db); } return self::$con; } function query($sql) { // TODO: Implement query() method. try { $result = $this->link->query($sql); return $result; } catch (\Exception $e) { echo $e->getMessage(); } } function fetchall($sql) { // TODO: Implement fetchall() method. $result = $this->query($sql); while ($row = $result->fetch_assoc()){ $data[] = $row; } $result->free(); return $data; } function __destruct() { } } $instance = \Data\Database::getInstance('localhost', 'root', 'xxx', 'xxx'); var_dump($instance->fetchall("show tables"));
静态方法 getInstance 先检测静态变量con是否存在,若果存在,则返回变量而不必再次实例化,否则new 一个 mysqli 对象,从而保证代码只有一个实例。