久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放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)站

      總是在重復,氣抖冷,trait何時才能站起來?

      類中的某些成員如何才能被其他類使用呢?使用繼承的話,這繼承鏈也太長了,php提供了代碼復用技術(shù)trait。

      1.定義Trait 是為類似 PHP 的單繼承語言而準備的一種代碼復用機制。trait可以使得單繼承語言拜托為了復用而不得不繼承的尷尬,讓面向?qū)ο?/code>變得更加純粹。

      2.基礎(chǔ)語法

      trait是一種類似class的關(guān)鍵字。

      <?php      trait Eat{         public $a=10;      //trait內(nèi)允許有類的成員屬性(包括靜態(tài)屬性),成員方法(包括靜態(tài)方法)         public static $b=666;         //const c=3.14;       //trait內(nèi)不允許有常量         protected $e;	//允許定義,但是實際不用         private $f;         public function getA()         {                echo $this->a,"<br>";         }         public static function getB()         {                echo self::$b,"<br>";         }     } ?>

      trait是用來實現(xiàn)代碼的復用的,不可以被實例化也不可以被繼承(不是類)。

      <?php    trait Eat{}   // $a=new Eat;//報錯   //calss A extends Eat{}//報錯 ?>

      3.trait的使用

      trait只是一段代碼的集合,使用時必須要使用use進行引用。

      <?php          trait Eat{         public $a=10;         public static $b=666;         //const c=3.14;         public function getA()         {                echo $this->a,"<br>";         }         public static function getB()         {                echo self::$b,"<br>";         }     }          class A{         use Eat;           public function getC()         {             echo $this->a,"<br>";         }     }      $boy=new A();     $boy->getC();     $boy->getA();     $boy->getB(); ?>

      一個類可以使用多個trait。

      <?php    trait A1{    }    trait A2{    }    class People{      use A1,A2;    } ?>

      4.trait使用的問題

      a.如果同時引入的多個trait中有同名屬性,那么會產(chǎn)生沖突。

      <?php     trait A1{        public $a=11;     }     trait A2{        public $a=22;     }      class A3{         use A1,A2;//不允許同名屬性         public function geta(){             echo $this->a;         }     }      $example=new A3();     ?>

      b.如果同時引入的多個trait中有同名方法,那么會產(chǎn)生沖突,有兩種方案解決如A3、A4。

      <?php     trait A1{        public $a=11;        public function eat(){            echo "A1中eat()方法","<br>";        }     }     trait A2{        public $b=22;        public function eat(){         echo "A2中eat()方法","<br>";       }     }      class A3{         use A1,A2{           A1::eat insteadOf A2; //A1中的eat替代A2中的eat         }     }     class A4{         use A1,A2{             A1::eat insteadOf A2;//A1中的eat替代A2中的eat             A2::eat as eat2;     //A2中的eat取別名eat2           }     }      $example=new A3();     $example->eat();     $example=new A4();     $example->eat2(); ?>

      c.同名覆蓋問題:如果類中有與引入的trait同名成員,會有不同處理:

      • 屬性:不允許重名,即類中不允許定義與trait中同名的成員屬性(靜態(tài)屬性也一樣)。

      • 方法:類覆蓋trait。

      d.繼承覆蓋問題:如果類中在使用trait的同時,也是繼承自父類,而trait中與父類中有同名方法,那么trait中將覆蓋父類同名方法;如果要訪問父類方法,可以在trait同名方法中使用parent關(guān)鍵字訪問父類同名方法。

      <?php     trait Eat{     public function eat(){         echo 'Eat::eat';     } }     class Human{     public function eat(){         echo 'Human::eat';     } } //子類繼承父類同時使用trait class Man extends Human{     use Eat; }  $m = new Man(); $m->eat(); ?>

      e.trait自己不能訪問,只是用來給其他類提供代碼復用的,因此允許類在使用trait時更高里面方法的訪問控制權(quán):在as之后,使用目標訪問修飾限定符。

      <?php trait Eat{     private function show(){         echo 'eat';     } } class Human{     use Eat{         show as public eshow;				         //注意:as是用來設(shè)定別名的,雖然沒有同名show,但是系統(tǒng)認為show已經(jīng)存在,所以必須別名,權(quán)限的更改的方法不是         //本尊     } } $h = new Human(); $h->eshow();								//eat ?>

      f.trait中可以使用抽象方法,用來規(guī)范使用類必須實現(xiàn)對應抽象方法:使用類要么為抽象類,要么就必須實現(xiàn)抽象方法。

      <?php    trait Eat{      public function eat();		//抽象方法    }    abstract class Human{			     use Eat;					//抽象類:可以不實現(xiàn)抽象方法    }     class Animal{     use Eat;     public function eat(){		//具體類:實現(xiàn)抽象方法         echo 'Animal::eat';	     }		 } ?>

      推薦:php教程,php視頻教程

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