<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在PHP中實(shí)現(xiàn)多繼承

          共 1927字,需瀏覽 4分鐘

           ·

          2022-06-11 19:22

          trait是什么

          trait是為了在PHP實(shí)現(xiàn)多繼承的一種實(shí)現(xiàn)機(jī)制。PHP使用extends實(shí)現(xiàn)繼承,本身是不能繼承多個(gè)類的。同一類可以實(shí)現(xiàn)多個(gè)trait類。更多關(guān)于PHP面試題,請點(diǎn)擊查看。

          優(yōu)先級

          1. 如果當(dāng)前類和trait存在同名方法,當(dāng)前類的優(yōu)先級是高于trait類中同名方法。
          trait?A
          {
          ????public?function?show()
          ????
          {
          ????????"traitA-show"
          ????}
          }

          class?B?{
          ????use?A;
          ????public?function?show()
          ????
          {
          ????????"B-show"
          ????}
          }
          //?output
          //?B-show
          1. 如果當(dāng)前類繼承了一個(gè)基類,并且實(shí)現(xiàn)了一個(gè)trait類。三則中存在同名方法,其優(yōu)先級為:當(dāng)前類->trait類->基類。
          2. 如果兩個(gè) trait 都插入了一個(gè)同名的方法,如果沒有明確解決沖突將會產(chǎn)生一個(gè)致命錯(cuò)誤。需要使用指定別名來全部實(shí)現(xiàn)trait類中的方法。
          class?A
          {
          ????//?該方法只會實(shí)現(xiàn)指定的方法,trait類中的其他方法將會被排除。
          ????use?TraitA,?TraitB?{
          ????????A:function1?insteadof?a;
          ????????B:function1?insteadof?b;
          ????}
          ????
          ????//?給實(shí)現(xiàn)的trait類中,方法沖突的都指定一個(gè)別名。
          ????use?TraitA,?TraitB?{
          ????????A:function1?as?af1;
          ????????A:function2?as?af2;
          ????????B:function1?as?bf1;
          ????????B:function2?as?bf2;
          ????}
          }
          1. 指定實(shí)現(xiàn)trait類中的方法權(quán)限。
          class?A
          {
          ????use?TraitA?{
          ????????A:function1?as?private?af1;
          ????}
          }
          1. trait類本身也可以集成其他的trait類。
          trait?A?{

          }

          trait?B?{

          }

          trait?C?{
          ????use?A,?B;
          }
          1. 為了對使用的類施加強(qiáng)制要求,trait 支持抽象方法的使用。支持 public 、protected 和 private 方法。PHP 8.0.0 之前, 僅支持 public 和 protected 抽象方法。
          trait?Hello?{
          ????public?function?sayHelloWorld()?{
          ????????echo?'Hello'.$this->getWorld();
          ????}
          ????abstract?public?function?getWorld();
          }

          class?MyHelloWorld?{
          ????private?$world;
          ????use?Hello;
          ????public?function?getWorld()?{
          ????????return?$this->world;
          ????}
          ????public?function?setWorld($val)?{
          ????????$this->world?=?$val;
          ????}
          }
          1. Traits 可以定義靜態(tài)變量、靜態(tài)方法和靜態(tài)屬性。自 PHP 8.1.0 起,棄用直接在 trait 上調(diào)用靜態(tài)方法或者訪問靜態(tài)屬性。靜態(tài)方法和屬性應(yīng)該僅在使用了 trait 的 class 中訪問。
          trait?StaticExample?{
          ????public?static?$name?=?"john";
          ????public?static?function?doSomething()?{
          ????????return?'Doing?something';
          ????}
          }

          class?Example?{
          ????use?StaticExample;
          }
          Example::name;
          Example::doSomething();
          1. Trait 同樣可以定義屬性。Trait 定義了一個(gè)屬性后,類就不能定義同樣名稱的屬性,否則會產(chǎn)生 fatal error。有種情況例外:屬性是兼容的(同樣的訪問可見度、初始默認(rèn)值)。
          trait?PropertiesTrait?{
          ????public?$same?=?true;
          ????public?$different?=?false;
          }

          class?PropertiesExample?{
          ????use?PropertiesTrait;
          ????public?$same?=?true;
          ????public?$different?=?true;?//?致命錯(cuò)誤
          }


          瀏覽 149
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人性爱网 | 黄色在线视频免费观看 | 看片亚洲| 国产偷拍自拍在线观看 | 国产视频一区在线播放 |