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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

不是很理解$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)驗(yàn) 獲得超4個(gè)贊

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

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

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

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

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

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

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

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

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

/* 例子:數(shù)據(jù)庫(kù)連接職責(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í)行一個(gè)查詢        return pg_query($this->_db, $sql);    }}

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


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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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