国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
PHP 面向?qū)ο蠡A(chǔ)(接口,類),php面向
首頁 後端開發(fā) php教程 PHP 面向?qū)ο蠡A(chǔ)(接口,類),php面向_PHP教程

PHP 面向?qū)ο蠡A(chǔ)(接口,類),php面向_PHP教程

Jul 12, 2016 am 08:52 AM
抽象類別

PHP 面向?qū)ο蠡A(chǔ)(接口,類),php面向

介紹PHP面向?qū)ο蟮幕A(chǔ)知識

1. 接口的定義interface ,類定義class,類支持abstract和final修飾符,abstract修飾為抽象類,抽象類

不支持直接實(shí)例化,final修飾的類/方法不能被繼承/方法重寫.
2. 接口的實(shí)現(xiàn)通過implements,類繼承extends

  <span>interface</span><span> IShape{
    </span><span>function</span><span> draw_core();
  };

  </span><span>class</span> PathShape <span>implements</span><span> IShape{
    </span><span>public</span> <span>function</span><span> draw_core(){}
  }

  </span><span>class</span> Rectangle <span>extends</span><span> PathShape{
    </span><span>public</span> <span>function</span><span> draw_core(){
      </span><span>//</span><span>overide draw_core</span>
<span>    }
  }</span>

3.靜態(tài)變量和常量(static ,const )
a.常量聲明變量名前面不需要加美元修飾符$,靜態(tài)變量需要
b.兩者都通過類訪問,靜態(tài)變量方法時候需要在變量名前加$美元修飾符好

   <span>class</span><span> MyClass{
     </span><span>const</span><span> M_CONST_VALUE;
     </span><span>static</span> <span>$M_STATIC_VALUE</span><span>;
   }

   MyClass</span>::<span>M_CONST_VALUE ;
   MyClass</span>::<span>$M_STATIC_VALUE</span>;

c.常量聲明時候不支持訪問權(quán)限修飾符,不能在const前加public,常量默認(rèn)就是public。

   <span>const</span> M_CONST  ; <span>//</span><span>OK</span>
   <span>public</span> <span>const</span> M_CONST ; <span>//</span><span> throw exception</span>

4.類內(nèi)部訪問非靜態(tài)/常量變量和方法通過$this,訪問父類通過parent,在類內(nèi)部訪問靜態(tài)變量和方法可以通過
self,self本質(zhì)是指向該類也可以通過static訪問

   parent::method(); <span>//</span><span>父類方法</span>
   <span>$this</span>->method() ; <span>//</span><span>方法實(shí)例方法</span>
   self::<span>$static_value</span> ;<span>//</span><span>訪問靜態(tài)變量</span>
   <span>static</span>::<span>$static_value</span>;<span>//</span><span>同上</span>


5.static和self的區(qū)別在于self指的是解析上下文,也是是作用與當(dāng)前類,static指的是被調(diào)用
的類而不是包含類,典型的例子就是單例

 <span>abstract</span> <span>class</span><span> ParentClass{
   </span><span>public</span> <span>static</span> <span>function</span><span> createInstance(){
     </span><span>return</span> <span>new</span> <span>static</span><span>(); 
     </span><span>//</span><span>這里不能使用self,因?yàn)閟elf本意其實(shí)指向parentclass的
     //如果你使用了self,那么將拋出異常,提示抽象類無法實(shí)例化
     //而static并不直接指向parentclass而是作用與包含類
     //</span>
<span>   }
 }

 </span><span>class</span> ChildClass <span>extends</span><span> ParentClass{
   </span><span>//
</span> }

7.類中使用攔截器,PHP攔截器有__get,__set,__inset,__unset,__call,這里只關(guān)注geth和set攔截器

 __get(<span>$property</span><span>) 當(dāng)訪問未定義的屬性時候該方法被調(diào)用
 __set(</span><span>$property</span>,<span>$value</span><span>)當(dāng)給未定義的屬性賦值時被調(diào)用
 </span><span>class</span><span> MyClass{
    </span><span>public</span> <span>function</span> __get(<span>$property</span><span>){
       </span><span>echo</span> "Access __get"<span>;
       </span><span>if</span>(property_exists(<span>$this</span>,<span>$property</span><span>)){
          </span><span>return</span> <span>$this</span>-><span>$property</span><span>;
       }</span><span>else</span><span>{
         </span><span>return</span> "unknown"<span>;
       }
    }

    </span><span>public</span> <span>function</span> __set(<span>$property</span>,<span>$value</span><span>){
      </span><span>if</span>(!property_exists(<span>$this</span>,<span>$property</span><span>)){
       </span><span>$this</span>->Name = <span>$value</span>; <span>//</span><span>變量不存在就直接給$Name賦值</span>
<span>      }
    }
    
    </span><span>public</span> <span>$Name</span> = "visonme"<span>;
 };
 </span><span>//</span><span>訪問</span>
 <span>$obj</span>  = <span>new</span><span> MyClass();
 </span><span>$obj</span>->Name ; <span>//</span><span>直接訪問變量$Name</span>
 <span>$obj</span>->Password;<span>//</span><span>Password未定義,先訪問__get最后輸出unknown

 //-for __set</span>
 <span>$obj</span>->password = 'fz-visonme';<span>//</span><span>password不存在,那么將走_(dá)_setz最后給$Name賦值</span>
 <span>echo</span> <span>$obj</span>->Name ; <span>//</span><span> output: fz-visonme</span>

8.類構(gòu)造函數(shù)和析構(gòu)函數(shù):__construct, __destruct ,構(gòu)造函數(shù)實(shí)例化對象時候調(diào)用,多用于成員變量初始化工作,析構(gòu)在類銷毀時候調(diào)用,多用于收尾工作

<span>class</span><span> MyClass{
  </span><span>function</span><span> __construct(){}
  </span><span>function</span><span> __destruct(){}
}</span>

9.對象的復(fù)制通過clone,clone關(guān)鍵字使用“值復(fù)制"方式來產(chǎn)生一個新的對象,對于對象復(fù)制本身還是走引用復(fù)制的。

a.簡單類型賦值

<span>class</span><span> MyClass{
  </span><span>public</span> <span>$ID</span><span>;
};

</span><span>$a</span> = <span>new</span><span> MyClass;
</span><span>$a</span>->ID = 199<span>;
</span><span>$b</span> = <span>clone</span> <span>$a</span><span>;  
</span><span>echo</span> <span>$b</span>->ID;   <span>//</span><span> output: 199</span>

b.包含對象的復(fù)制

<span>class</span><span> Account{
  </span><span>public</span> <span>$RMB</span><span>;
};
</span><span>class</span><span> MyClass{
  </span><span>public</span> <span>$ID</span><span>;
  </span><span>public</span> <span>$AccountObj</span><span>;

  </span><span>public</span> <span>function</span> __construct(<span>$c</span><span>){
    </span><span>$this</span>->AccountObj = <span>$c</span><span>;
  }
};

</span><span>$a</span> = <span>new</span> MyClass(<span>new</span><span> Account());
</span><span>$a</span>->AccountObj->RMB= 199<span>;
</span><span>$b</span> = <span>clone</span> <span>$a</span><span>;
</span><span>echo</span> <span>$b</span>->AccountObj->RMB;   <span>//</span><span>output: 199</span>
<span>$a</span>->AccountObj->RMB = 100<span>;
</span><span>echo</span> <span>$b</span>->AccountObj->RMB;  <span>//</span><span>output: 100</span>
<span>
在clone后,</span><span>$a的AccountObj改變時候</span>,同時會影響到<span>$b</span>

這種結(jié)果顯然不是我們所期望的,我們所期望的是ab是兩個不存在任何關(guān)聯(lián)的獨(dú)立對象.

為了解決這個問題我么可以在類內(nèi)部實(shí)現(xiàn)__clone,當(dāng)我們在外面調(diào)用clone時候其內(nèi)部會調(diào)用類的__clonef方法,所以我們可以通過重寫__clone來達(dá)到對clone的控制.例如針對b例子的改造

<span>class</span><span> MyClass{
  </span><span>public</span> <span>$ID</span><span>;
  </span><span>public</span> <span>$AccountObj</span><span>;

  </span><span>public</span> <span>function</span> __construct(<span>$c</span><span>){
    </span><span>$this</span>->AccountObj = <span>$c</span><span>;
  }

  </span><span>//</span><span>__clone實(shí)現(xiàn)clone的控制
  //這里內(nèi)部同時對Account實(shí)現(xiàn)一次clone,這里就可以避免b例子中出現(xiàn)的問題</span>
  <span>public</span> <span>function</span><span> __clone(){
    </span><span>$this</span>->ID = 0 ; <span>//</span><span>將ID置為0,如果你需要的話</span>
    <span>$this</span>->AccountObj = <span>clone</span> <span>$this</span>-><span>AccountObj;
  }
};</span>

關(guān)于__clone方法我們需要知道,該方法是在被clone后的對象上調(diào)用,而不是在原始的對象上面運(yùn)行的,例如上b例子中

? $b = clone $a ; //執(zhí)行的過程: 基本復(fù)制對象$a ---> $b執(zhí)行__clone()?

?


?

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1126840.htmlTechArticlePHP 面向?qū)ο蠡A(chǔ)(接口,類),php面向 介紹PHP面向?qū)ο蟮幕A(chǔ)知識 1. 接口的定義interface ,類定義class,類支持abstract和final修飾符,abstract修飾...
本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中介面與抽象類別在設(shè)計(jì)模式中的應(yīng)用 Java 中介面與抽象類別在設(shè)計(jì)模式中的應(yīng)用 May 01, 2024 pm 06:33 PM

介面和抽象類別在設(shè)計(jì)模式中用於解耦和可擴(kuò)展性。介面定義方法簽名,抽象類別提供部分實(shí)現(xiàn),子類別必須實(shí)作未實(shí)現(xiàn)的方法。在策略模式中,介面用於定義演算法,抽象類別或具體類別提供實(shí)現(xiàn),允許動態(tài)切換演算法。在觀察者模式中,介面用於定義觀察者行為,抽象類別或具體類別用於訂閱和發(fā)布通知。在適配器模式中,介面用於適應(yīng)現(xiàn)有類,抽象類或具體類可實(shí)現(xiàn)相容接口,允許與原有程式碼互動。

golang是否有抽象類 golang是否有抽象類 Jan 06, 2023 pm 07:04 PM

golang沒有抽象類別。 golang並不是物件導(dǎo)向(OOP)語言,沒有類別和繼承的概念,也沒有抽象類別的概念;但golang中有結(jié)構(gòu)體(struct)和介面(interface),可以透過struct和interface的組合來間接實(shí)作面向物件語言中的抽象類別。

PHP中的介面和抽象類別有何不同? PHP中的介面和抽象類別有何不同? Jun 04, 2024 am 09:17 AM

介面和抽象類別用於建立可擴(kuò)展的PHP程式碼,它們之間存在以下關(guān)鍵差異:介面透過實(shí)作強(qiáng)制執(zhí)行,而抽象類別透過繼承強(qiáng)制執(zhí)行。介面不能包含具體方法,而抽象類別可以。一個類別可以實(shí)作多個接口,但只能從一個抽象類別繼承。介面不能實(shí)例化,而抽象類別可以。

PHP中的抽像類和接口有什麼區(qū)別? PHP中的抽像類和接口有什麼區(qū)別? Apr 08, 2025 am 12:08 AM

抽像類和接口的主要區(qū)別在於:抽像類可以包含方法的實(shí)現(xiàn),而接口只能定義方法的簽名。 1.抽像類使用abstract關(guān)鍵字定義,可包含抽象和具體方法,適合提供默認(rèn)實(shí)現(xiàn)和共享代碼。 2.接口使用interface關(guān)鍵字定義,只包含方法簽名,適合定義行為規(guī)範(fàn)和多重繼承。

深入探討 Golang 函數(shù)介面與抽象類別的異同 深入探討 Golang 函數(shù)介面與抽象類別的異同 Apr 20, 2024 am 09:21 AM

函數(shù)介面與抽象類別均用於程式碼可重複使用性,但實(shí)作方式不同:函數(shù)介面透過引用函數(shù),抽象類別透過繼承。函數(shù)介面不可實(shí)例化,抽象類別可實(shí)例化。函數(shù)介面必須實(shí)作所有宣告的方法,抽象類別可只實(shí)作部分方法。

Java 中介面和抽象類別的內(nèi)部類別實(shí)現(xiàn) Java 中介面和抽象類別的內(nèi)部類別實(shí)現(xiàn) Apr 30, 2024 pm 02:03 PM

Java允許在介面和抽象類別中定義內(nèi)部類別,為程式碼重複使用和模組化提供靈活性。介面中的內(nèi)部類別可實(shí)現(xiàn)特定功能,而抽象類別中的內(nèi)部類別可定義通用功能,子類別提供具體實(shí)作。

Java 介面與抽象類別:通往程式設(shè)計(jì)天堂之路 Java 介面與抽象類別:通往程式設(shè)計(jì)天堂之路 Mar 04, 2024 am 09:13 AM

介面:無實(shí)作的契約介面在Java中定義了一組方法簽名,但不提供任何具體實(shí)作。它充當(dāng)一種契約,強(qiáng)制實(shí)作該介面的類別實(shí)現(xiàn)其指定的方法。介面中的方法是抽象方法,沒有方法體。程式碼範(fàn)例:publicinterfaceAnimal{voideat();voidsleep();}抽象類別:部分實(shí)作的藍(lán)圖抽象類別是一種父類,它提供了一個部分實(shí)現(xiàn),可以被它的子類別繼承。與介面不同,抽象類別可以包含具體的實(shí)作和抽象方法。抽象方法是用abstract關(guān)鍵字聲明的,並且必須被子類別覆蓋。程式碼範(fàn)例:publicabstractcla

Java 介面與抽象類別:揭示它們之間的內(nèi)在聯(lián)繫 Java 介面與抽象類別:揭示它們之間的內(nèi)在聯(lián)繫 Mar 04, 2024 am 09:34 AM

介面介面在Java中定義了抽象方法和常數(shù)。介面中的方法沒有實(shí)現(xiàn),而是由實(shí)作該介面的類別來提供。介面定義了合同,要求實(shí)作類別提供指定的方法實(shí)作。宣告介面:publicinterfaceExampleInterface{voiddoSomething();intgetSomething();}抽象類別抽象類別是一個不能被實(shí)例化的類別。它包含抽象方法和非抽象方法的混合。與介面類似,抽象類別中的抽象方法由子類別實(shí)作。但是,抽象類別還可以包含具體的方法,這些方法提供了預(yù)設(shè)實(shí)作。聲明抽象類別:publicabstractcl

See all articles