久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放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. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

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

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

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

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

      單例模式的定義:保證一個類只有一個實例,并提供一個訪問它的全局訪問點。

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

      class Singleton {     //創(chuàng)建靜態(tài)私有的變量保存該類對象     static private $instance;     //防止使用new直接創(chuàng)建對象     private function __construct(){}     //防止使用clone克隆對象     private function __clone(){}     static public function getInstance()     {         //判斷$instance是否是Singleton的對象,不是則創(chuàng)建         if (!self::$instance instanceof self) {             self::$instance = new self();         }         return self::$instance;     }     public function test()     {         echo "我是一個單例模式";     } } $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實現(xiàn)單例模式有什么意義:

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

      真的沒有意義嗎?

      當然不是。

      看下代碼:

      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)用的過程中,創(chuàng)建了兩個C類對象,我們知道,new是很耗資源的一種操作,如果這里C類是單例模式,只new一次就行了,這個想法是可以的,但我們一般用另外一種方法來做:

      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類對象被創(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類只被實例化了一次,再實際操作中,我們一般使用靜態(tài)變量保存對象,變相實現(xiàn)單例模式。

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

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

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

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