第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不是很理解$ins在單例中是怎么發(fā)生的作用?

不是很理解$ins在單例中是怎么發(fā)生的作用?

PHP
catspeake 2023-04-24 19:15:23
class conf{protected static $ins=null;protected $data=array();final protected function __construct(){include ('include/config.inc.php');$this->data=$_CFG;}final protected function __clone(){}public static function getIns(){if(self::$ins instanceof self ){return $this->data[$key];}else{return null;}}public function __set($key,$value){$this_>data[$key]=$value;}}$conf=conf::getIns();
查看完整描述

2 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗 獲得超4個贊

單例的作用是保證在類被調(diào)用的時候只被實例化一次

并且每次調(diào)用的都是該被實例化的類

作用可以思考,一個數(shù)據(jù)庫鏈接,在一次訪問中只需要一個數(shù)據(jù)庫鏈接,并不應(yīng)該產(chǎn)生多個數(shù)據(jù)庫鏈接

實現(xiàn)的方式是通過聲明一個靜態(tài)變量,用來存儲唯一的實例化對象
類被調(diào)用的方式不是童工new的實例化調(diào)用,為了保證不在外部被實例化,所以需要將__construct()實例化函數(shù)設(shè)置為私有或者子類繼承,通過統(tǒng)一的調(diào)用接口調(diào)用,在你的例子里面就是getlns
該函數(shù)中判斷了靜態(tài)變量是否是滿足自身的接口設(shè)定,不滿足則實例化自己
你的代碼在return $this->data[$key];這句應(yīng)該是錯誤的
整個getlns應(yīng)該改為如下
public static function getIns(){
if(!self::$ins instanceof self ){
self::$ins = new self():
}
return self::$ins;
}
你估計是寫錯了函數(shù),你可以發(fā)現(xiàn)你的getlns中沒喲$key變量,但內(nèi)部卻調(diào)用了,所以你應(yīng)該再檢查下你寫的代碼

查看完整回答
反對 回復(fù) 2023-04-27
?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗 獲得超6個贊

單例類只能被其自身實例化。要獲得這樣的一種結(jié)果, __construct()方法必須被標(biāo)記為private。如果試圖用private構(gòu)造函數(shù)構(gòu)造一個類,就會得到一個可訪問性級別的錯誤。

要讓單例類起作用,就必須使其為其他類提供一個實例,用它調(diào)用各種方法。單例類不會創(chuàng)建實例副本,而是會向單例類內(nèi)部存儲的實例返回一個引用。結(jié)果
是單例類不會重復(fù)占用內(nèi)存和系統(tǒng)資源,從而讓應(yīng)用程序的其它部分更好地使用這些資源。作為這一模式的一部分,必須創(chuàng)建一個空的私有__clone()方
法,以防止對象被復(fù)制或克隆。

返回實例引用的這個方法通常被命名為getTnstance()。這個方法必須是靜態(tài)的,而且如果它還沒有實例化,就必須進(jìn)行實例化。getInstance() 方法通過使用 instanceof 操作符和self 關(guān)鍵字,可以檢測到類是否已經(jīng)被實例化。

/* 例子:數(shù)據(jù)庫連接職責(zé)的集中控制 */


class Database {    private $_db;    static $_instance;    private function __construct() {        $this->_db = pg_connect('dbname=example_db');    }    private __clone() {};    public static function getInstance() {        if( ! (self::$_instance instanceof self) ) {            self::$_instance new self();        }        return self::$_instance;    }    public function query($sql) {        // 使用 $this->_db 執(zhí)行一個查詢        return pg_query($this->_db, $sql);    }}

這個代碼可以正常進(jìn)行查詢之類的


$db=Database::getInstance();$db->query($sql);


查看完整回答
反對 回復(fù) 2023-04-27
  • 2 回答
  • 0 關(guān)注
  • 157 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號