PHP单例模式
单例模式概念
单例模式的特点
- <?php
- class MysqlConn
- {
- // MYSQL数据库连接信息
- const MYSQLHOSTNAME = "127.0.0.1";
- const MYSQLUSERNAME = "root";
- const MYSQLPASSWORD = "***";
- const MYSQLDBNAME = "test";
- const MYSQLCHARSET = "utf8";
- /**
- * Description:mysql数据库连接函数
- * Return value:连接成功返回数据库连接句柄;连接失败返回错误消息
- */
- public function MysqlConnect()
- {
- $db = new mysqli(self::MYSQLHOSTNAME, self::MYSQLUSERNAEM, self::MYSQLPASSWORD, self::MYSQLDBNAME); // 连接数据库
- $db->set_charset(self::MYSQLCHARSET);
- if (mysqli_connect_errno())
- {
- throw new CircleMysqlException("服务器系统故障", 1001);
- }
- else
- {
- return $db;
- }
- }
- }
缺陷:
改进:
每次应该直接返回当前应用中已经打开的数据库连接句柄
- //单例模式返回数据库连接句柄
- $db = MysqlConn::SingleMysqlConnect();
php单例模式的实现
- <?php
- class Singleton
- {
- /**
- * Description:(1)静态变量,保存全局实例,跟类绑定,跟对象无关
- * (2)私有属性,为了避免类外直接调用 类名::$instance,防止为空
- */
- private static $instance;
- /**
- * Description:数据库连接句柄
- */
- private $db;
- /**
- * Description:私有化构造函数,防止外界实例化对象
- */
- private static function __construct()
- {
- }
- /**
- * Description:私有化克隆函数,防止外界克隆对象
- */
- private function __clone()
- {
- }
- /**
- * Description:静态方法,单例访问统一入口
- * @return Singleton:返回应用中的唯一对象实例
- */
- public static function GetInstance()
- {
- if (!(self::$instance instanceof self))
- {
- self::$instance = new self();
- }
- return self::$instance;
- }
- /**
- * Description:获取数据库的私有方法的连接句柄
- */
- public function GetDbConnect()
- {
- return $this->db;
- }
- }
- 需要一个保存类的唯一实例的静态成员变量(通常$instance为私有变量)
- 构造函数和克隆函数必须声明为私有的,为了防止外部程序new类从而失去单例模式意义
- 必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。