如题所述
单例模式要点三:
某类能实例;
二必须自行创建实例;
三必须自行向整系统提供实例
复制代码 代码:
<?php
/* 单例模式举例,其要点:
*
* 1. $_instance 必须声明静态私变量
* 2. 构造函数克隆函数必须声明私,防止外部程序 new 类失单例模式意义
* 3. getInstance()必须声明公,必须调用返唯实例引用
* 4. ::操作符能访问静态变量或静态函数
* 5. PHP单例模式相言,PHP解释运行机制使每PHP页面解释执行所相关资源都收
* 说PHP语言级别没办让某象驻内存PHP所变量都页面级论全局变量
* 类静态员都页面执行完毕清空,结重新建立新象完全失Singleton意义
* ,实际应用同页面能存业务逻辑,单例模式起重要作用,效避免重复
* new 象(注: new 象消耗内存资源)行,所我说PHP单例模式相言
*
*/
class People
{
static private $_instance = NULL;
public $height = '';
public $age = '';
private function __construct()
{
$this->height = '185';
$this->age = 25;
}
private function __clone()
{
//do something
}
static public function getInstance()
{
if(!self::$_instance instanceof self)
{
//echo 'lgh-big';
self::$_instance = new self;
}
else
{
//for testing only
//echo 'gdc-xiaoairener';
}
return self::$_instance;
}
public function getHeight()
{
echo $this->height;
}
public function getAge()
{
echo $this->age;
}
}
function testInstance()
{
People::getInstance()->getAge();
}
//begin to use the class
$lgh = People::getInstance();
$lgh->getHeight();
echo '
';
testInstance();
?>
优点:单例模式避免量new操作每new操作都消耗内存资源系统资源
缺点:PHP所变量论全局变量类静态员都 页面级每页面执行都重新建立新象都页面执行完毕清空似乎PHP单例模式没意义所PHP单例模式我觉 针单页面级请求现应用场景并需要共享同象资源非意义
Why–要使用PHP单例模式
PHP主要应用场合应用程序与数据库打交道应用场景所应用存量数据库操作比数据库句柄连接数据库行使用单例模式避免量new操作每new操作都消耗内存资源系统资源
些抽象给代码片段
使用传统式编码
复制代码 代码:
<?php
......
//初始化数据库句柄
$db = new DB(...);
//比应用场景添加条用户信息:
$db->addUserInfo();
......
//我另外能要查找用户信息情景现函数要用数据库句柄资源我能需要做
......
function test(){
......
//我重新初始化数据库句柄,试想应用场景代码怕啊
$db = new DB(...);
$db->getUserInfo();
......
//些朋友或许说我做啊我直接利用global关键字确global解决问题起单例模式作用OOP我拒绝编写代码global存安全隐患请参考相关书籍同单例模式恰恰全局变量种改进避免些存储唯实例全局变量污染命名空间
global $db; //OOP我提倡编写代码
......
}
使用单例模式编码
复制代码 代码:
<?php
......
//所应用情景数据库句柄资源嘿嘿效率高
//资源节省代码简洁明:)
DB::getInstance()->addUserInfo();
DB::getInstance()->getUserInfo();
......
How–何编写PHP单例模式
解单例模式应用场景面我通编写单例模式具体实现代码掌握PHP单例模式核要点代码:
复制代码 代码:
<?php
/**
* PHP单例模式演示举例
* @author guohua.li
* @modify 2010-07-11
* @website
*/
class User{
/**
* 静态品变量 保存全局实例
* @access private
*/
static private $_instance = NULL;
/**
* 私化构造函数防止外界实例化象
*/
private function __construct() {}
/**
* 私化克隆函数防止外界克隆象
*/
private function __clone(){}
/**
* 静态, 单例统访问入口
* @return object 返象唯实例
*/
static public function getInstance() {
if (is_null(self::$_instance) || !isset(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* 测试: 获取用户名字
*/
public function getName() {
echo 'hello liguohua!';
}
}
代码我总结PHP单例模式实现核要点三条:
1.需要保存类唯实例静态员变量(通$_instance私变量)
2.构造函数克隆函数必须声明私防止外部程序new类失单例模式意义
3.必须提供访问实例公共静态(通getInstance)返唯实例引用
PHP单例模式缺点
众所周知PHP语言种解释型脚本语言种运行机制使每PHP页面解释执行所相关资源都收说PHP语言级别没办让某象驻内存asp.net、Java等编译型同比Java单例直存于整应用程序命周期变量跨页面级真做实例应用程序命周期唯性PHP所变量论全局变量类静态员都页面级每页面执行都重新建立新象都页面执行完毕清空似乎PHP单例模式没意义所PHP单例模式我觉针单页面级请求现应用场景并需要共享同象资源非意义
某类能实例;
二必须自行创建实例;
三必须自行向整系统提供实例
复制代码 代码:
<?php
/* 单例模式举例,其要点:
*
* 1. $_instance 必须声明静态私变量
* 2. 构造函数克隆函数必须声明私,防止外部程序 new 类失单例模式意义
* 3. getInstance()必须声明公,必须调用返唯实例引用
* 4. ::操作符能访问静态变量或静态函数
* 5. PHP单例模式相言,PHP解释运行机制使每PHP页面解释执行所相关资源都收
* 说PHP语言级别没办让某象驻内存PHP所变量都页面级论全局变量
* 类静态员都页面执行完毕清空,结重新建立新象完全失Singleton意义
* ,实际应用同页面能存业务逻辑,单例模式起重要作用,效避免重复
* new 象(注: new 象消耗内存资源)行,所我说PHP单例模式相言
*
*/
class People
{
static private $_instance = NULL;
public $height = '';
public $age = '';
private function __construct()
{
$this->height = '185';
$this->age = 25;
}
private function __clone()
{
//do something
}
static public function getInstance()
{
if(!self::$_instance instanceof self)
{
//echo 'lgh-big';
self::$_instance = new self;
}
else
{
//for testing only
//echo 'gdc-xiaoairener';
}
return self::$_instance;
}
public function getHeight()
{
echo $this->height;
}
public function getAge()
{
echo $this->age;
}
}
function testInstance()
{
People::getInstance()->getAge();
}
//begin to use the class
$lgh = People::getInstance();
$lgh->getHeight();
echo '
';
testInstance();
?>
优点:单例模式避免量new操作每new操作都消耗内存资源系统资源
缺点:PHP所变量论全局变量类静态员都 页面级每页面执行都重新建立新象都页面执行完毕清空似乎PHP单例模式没意义所PHP单例模式我觉 针单页面级请求现应用场景并需要共享同象资源非意义
Why–要使用PHP单例模式
PHP主要应用场合应用程序与数据库打交道应用场景所应用存量数据库操作比数据库句柄连接数据库行使用单例模式避免量new操作每new操作都消耗内存资源系统资源
些抽象给代码片段
使用传统式编码
复制代码 代码:
<?php
......
//初始化数据库句柄
$db = new DB(...);
//比应用场景添加条用户信息:
$db->addUserInfo();
......
//我另外能要查找用户信息情景现函数要用数据库句柄资源我能需要做
......
function test(){
......
//我重新初始化数据库句柄,试想应用场景代码怕啊
$db = new DB(...);
$db->getUserInfo();
......
//些朋友或许说我做啊我直接利用global关键字确global解决问题起单例模式作用OOP我拒绝编写代码global存安全隐患请参考相关书籍同单例模式恰恰全局变量种改进避免些存储唯实例全局变量污染命名空间
global $db; //OOP我提倡编写代码
......
}
使用单例模式编码
复制代码 代码:
<?php
......
//所应用情景数据库句柄资源嘿嘿效率高
//资源节省代码简洁明:)
DB::getInstance()->addUserInfo();
DB::getInstance()->getUserInfo();
......
How–何编写PHP单例模式
解单例模式应用场景面我通编写单例模式具体实现代码掌握PHP单例模式核要点代码:
复制代码 代码:
<?php
/**
* PHP单例模式演示举例
* @author guohua.li
* @modify 2010-07-11
* @website
*/
class User{
/**
* 静态品变量 保存全局实例
* @access private
*/
static private $_instance = NULL;
/**
* 私化构造函数防止外界实例化象
*/
private function __construct() {}
/**
* 私化克隆函数防止外界克隆象
*/
private function __clone(){}
/**
* 静态, 单例统访问入口
* @return object 返象唯实例
*/
static public function getInstance() {
if (is_null(self::$_instance) || !isset(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* 测试: 获取用户名字
*/
public function getName() {
echo 'hello liguohua!';
}
}
代码我总结PHP单例模式实现核要点三条:
1.需要保存类唯实例静态员变量(通$_instance私变量)
2.构造函数克隆函数必须声明私防止外部程序new类失单例模式意义
3.必须提供访问实例公共静态(通getInstance)返唯实例引用
PHP单例模式缺点
众所周知PHP语言种解释型脚本语言种运行机制使每PHP页面解释执行所相关资源都收说PHP语言级别没办让某象驻内存asp.net、Java等编译型同比Java单例直存于整应用程序命周期变量跨页面级真做实例应用程序命周期唯性PHP所变量论全局变量类静态员都页面级每页面执行都重新建立新象都页面执行完毕清空似乎PHP单例模式没意义所PHP单例模式我觉针单页面级请求现应用场景并需要共享同象资源非意义
温馨提示:答案为网友推荐,仅供参考