|
一是某個類只能有一個實例;
二是它必須自行創建這個實例;
三是它必須自行向整個系統提供這個實例。
復制代碼 代碼如下:
<?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 '<br />';
testInstance();
?>
優點:單例模式可以避免大量的new操作,因為每一次new操作都會消耗內存資源和系統資源
缺點:在php中,所有的變量無論是全局變量還是類的靜態成員,都是 頁面級的,每次頁面被執行時,都會重新建立新的對象,都會在頁面執行完畢后被清空,這樣似乎php單例模式就沒有什么意義了,所以php單例模式我覺得只 是針對單次頁面級請求時出現多個應用場景并需要共享同一對象資源時是非常有意義的。
Why 主站蜘蛛池模板: 亚洲这里只有精品 | 噼里啪啦免费观看视频大全 | 一个人的HD高清在线观看 | 无码人妻丰满熟妇区五十路久久 | 国产成人精品免费视频下载 | 成人在线免费视频播放 | 成人国产免费 | 亚洲午夜AV久久久精品影院色戒 | X8X8拨牐拨牐X8免费视频8午夜 | 纯肉腐文高H总受男男 | 91久久偷偷做嫩草影院免 | 亚洲黄色官网 | 婷婷五月久久丁香国产综合 | 国精产品一区一区三区有限 | 蜜芽丅v新网站在线观看 | 99视频精品免视3 | old胖老太fat bbw青年 | 亚洲高清无在码在线无弹窗 | 日韩一区二区在线免费观看 | 免费精品国偷自产在线 | 色翁荡息又大又硬又粗又爽电影 | 一本一本之道高清在线观看 | 久久理论片 | 蜜桃精品成人影片 | 91精品国产色综合久久 | 男人就爱吃这套下载 | 久久久久久亚洲精品影院 | 亚洲AV怡红院影院怡春院 | 国产人妻精品久久久久久很牛 | 亚洲日本欧美国产在线视 | 日韩精品免费一区二区 | 冰山高冷受被c到哭np双性 | 亚洲精品影院久久久久久 | 午夜在线播放免费人成无 | 日韩精品专区在线影院重磅 | 日韩欧美视频一区二区 | 亚洲国产精品免费线观看视频 | 中文字幕成人在线观看 | 闺蜜撬开我的腿用黄瓜折磨我 | 乳色吐息未增删樱花ED在线观看 | 伊人久在线 |