久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      php怎樣實(shí)現(xiàn)單例模式

      php實(shí)現(xiàn)單例模式的方法:首先創(chuàng)建靜態(tài)私有的變量保存該類對(duì)象;然后防止使用new直接創(chuàng)建對(duì)象;接著防止使用clone克隆對(duì)象;最后判斷【$instance】是否是Singleton的對(duì)象,不是則創(chuàng)建即可。

      php怎樣實(shí)現(xiàn)單例模式

      php實(shí)現(xiàn)單例模式的方法:

      單例模式的定義:保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。

      PHP實(shí)現(xiàn)單例模式:

      class Singleton {     //創(chuàng)建靜態(tài)私有的變量保存該類對(duì)象     static private $instance;     //防止使用new直接創(chuàng)建對(duì)象     private function __construct(){}     //防止使用clone克隆對(duì)象     private function __clone(){}     static public function getInstance()     {         //判斷$instance是否是Singleton的對(duì)象,不是則創(chuàng)建         if (!self::$instance instanceof self) {             self::$instance = new self();         }         return self::$instance;     }     public function test()     {         echo "我是一個(gè)單例模式";     } } $sing = Singleton::getInstance(); $sing->test(); $sing2 = new Singleton(); //Fatal error: Uncaught Error: Call to private Singleton::__construct() from invalid context in $sing3 = clone $sing; //Fatal error: Uncaught Error: Call to private Singleton::__clone() from context

      PHP實(shí)現(xiàn)單例模式有什么意義:

      沒(méi)有意義,PHP沒(méi)有線程概念,沒(méi)有異步代碼,不會(huì)常駐內(nèi)存,所有的修改自己都可以控制,不需要保證類只有一個(gè)實(shí)例,有什么意義?你要在數(shù)據(jù)庫(kù)連接類中使用單例模式,萬(wàn)一有的頁(yè)面需要連接兩個(gè)數(shù)據(jù)庫(kù)怎么辦?

      真的沒(méi)有意義嗎?

      當(dāng)然不是。

      看下代碼:

      class A {     public function show()     {         echo "我是A類函數(shù),要調(diào)用B類函數(shù)和C類函數(shù)<br/>";         $b = new B();         $b->show();         $c = new C();         $c->show('A');     } } class B {     public function show()     {         echo "我是B類函數(shù),要調(diào)用C類函數(shù)<br/>";         $c = new C();         $c->show('B');     } } class C {     public function show($parm)     {         echo "我是C類函數(shù),現(xiàn)在被{$parm}類函數(shù)調(diào)用<br/>";     } } $a = new A(); $a->show();

      這里調(diào)用的過(guò)程中,創(chuàng)建了兩個(gè)C類對(duì)象,我們知道,new是很耗資源的一種操作,如果這里C類是單例模式,只new一次就行了,這個(gè)想法是可以的,但我們一般用另外一種方法來(lái)做:

      class A {     public function show()     {         echo "我是A類函數(shù),要調(diào)用B類函數(shù)和C類函數(shù)<br/>";         $b = Unit::getInstance('B');         $b->show();         $c = Unit::getInstance('C');         $c->show('A');     } } class B {     public function show()     {         echo "我是B類函數(shù),要調(diào)用C類函數(shù)<br/>";         $c = Unit::getInstance('C');         $c->show('B');     } } class C {     public function __construct()     {         echo "C類對(duì)象被創(chuàng)建<br/>";     }     public function show($parm)     {         echo "我是C類函數(shù),現(xiàn)在被{$parm}類函數(shù)調(diào)用<br/>";     } } class Unit {     static public function getInstance($class)     {         static $arr = null;         if (!isset($arr[$class]) || !$arr[$class] instanceof $class) {             $arr[$class] = new $class();         }         return $arr[$class];     } } $a = new A(); $a->show();

      執(zhí)行代碼可以看到,C類只被實(shí)例化了一次,再實(shí)際操作中,我們一般使用靜態(tài)變量保存對(duì)象,變相實(shí)現(xiàn)單例模式。

      單例模式和使用靜態(tài)變量實(shí)現(xiàn)單例的區(qū)別:

      單例模式強(qiáng)制類只能創(chuàng)建一個(gè)對(duì)象,一般是安全或者統(tǒng)一界面展示的時(shí)候會(huì)用到,而靜態(tài)變量實(shí)現(xiàn)單例主要是為了減少new操作,并不能阻止new和clone操作。

      相關(guān)學(xué)習(xí)推薦:php編程(視頻)

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)