PHP作為一門非常流行的編程語言,其具有非常強大的編程能力,而其中Trait成為了PHP語言中最新的特性之一。由于Trait具有便于代碼重用的獨特優勢,它已經成為了PHP語言中一個非常重要的特性。而在Trait之中,Parent Trait則是一個非常重要的方面。今天,我們就來介紹下PHP Parent Trait的相關知識。
在Trait中,parent的作用是讓開發者能夠通過繼承的方式調用其他trait中的方法。在一個trait中使用parent時,需要注意其父trait的順序。具體來說,我們在使用PHP Parent Trait時需要注意一個重要的問題,那就是Trait的繼承關系會影響parent的調用。這里我們舉個例子:
如上面的代碼所示,我們創建了一個MyTraitA,它使echoHello方法能夠輸出 “Hello”;再創建一個MyTraitB,它使echoWorld方法能夠輸出 “World!”;最后創建一個MyTraitC,并在其中組合MyTraitA和MyTraitB,使其同時擁有echoHello和echoWorld方法。同時,MyTraitC提供了一個新方法echoFromAll,這個方法將先輸出Hello,再輸出World,就像一句完整的句子一樣。最終在MyClass類中,我們將使用MyTraitC,并創建一個$obj對象。然后我們調用$obj->echoFromAll()方法,最終輸出了“Hello World!”。
這個例子極好的展示了Trait的組合和parent的使用方式,透過這個例子我們可以更好的了解parent的意義所在,同時也能清晰的了解Trait之間的繼承關系。
在Trait結構中,使用parent的正確方法非常重要。我們的下一個例子將更清晰的展示parent繼承使用的重要性:
這個例子的結構和上一個例子十分相似。我們為你準備了b0和b1兩個trait,并定義了一個c1類和c2類分別使用了不同的b1和b0順序。我們定義了一個say方法,分別繼承了b0和b1的say方法并實現了新的功能。在這個例子當中,我們再次可以看到parent的重要性,因為我們的say方法是對于traits和類的呈現,當我們用父類調用時必須非常小心。在上述例子中,c1中使用的繼承是從b0進入到b1,但使用寄生式的c2中,使用的是從b1到b0的繼承。當我們對c1和c2分別調用say方法時,輸出的結果也有明顯的差異。
總體來說,PHP Parent Trait是Trait的一個非常重要的特性,對于我們的代碼復用和組合方面有非常強大的作用。不過,在使用Parent Trait的時候,為了保證代碼的正確性,我們需要嚴格遵守Trait的繼承關系,才能更好的發揮parent的作用。
在Trait中,parent的作用是讓開發者能夠通過繼承的方式調用其他trait中的方法。在一個trait中使用parent時,需要注意其父trait的順序。具體來說,我們在使用PHP Parent Trait時需要注意一個重要的問題,那就是Trait的繼承關系會影響parent的調用。這里我們舉個例子:
<?php trait MyTraitA { public function echoHello() { echo 'Hello '; } } trait MyTraitB { public function echoWorld() { echo 'World!'; } } trait MyTraitC { use MyTraitA, MyTraitB { MyTraitA::echoHello insteadof MyTraitB; MyTraitB::echoWorld as myEchoWorld; } public function echoFromAll() { return $this->echoHello() . $this->myEchoWorld(); } } class MyClass { use MyTraitC; } $obj = new MyClass(); echo $obj->echoFromAll(); // 輸出 Hello World!
如上面的代碼所示,我們創建了一個MyTraitA,它使echoHello方法能夠輸出 “Hello”;再創建一個MyTraitB,它使echoWorld方法能夠輸出 “World!”;最后創建一個MyTraitC,并在其中組合MyTraitA和MyTraitB,使其同時擁有echoHello和echoWorld方法。同時,MyTraitC提供了一個新方法echoFromAll,這個方法將先輸出Hello,再輸出World,就像一句完整的句子一樣。最終在MyClass類中,我們將使用MyTraitC,并創建一個$obj對象。然后我們調用$obj->echoFromAll()方法,最終輸出了“Hello World!”。
這個例子極好的展示了Trait的組合和parent的使用方式,透過這個例子我們可以更好的了解parent的意義所在,同時也能清晰的了解Trait之間的繼承關系。
在Trait結構中,使用parent的正確方法非常重要。我們的下一個例子將更清晰的展示parent繼承使用的重要性:
<?php trait b0 { public function say() { echo __CLASS__." : hello from b0. "; } } trait b1 { public function say() { echo __CLASS__." : hello from b1. "; } } class c1 { use b0, b1; public function say() { parent::say(); echo __CLASS__." : hello from c1. "; } } class c2 { use b1, b0; public function say() { parent::say(); echo __CLASS__." : hello from c2. "; } } <br> $c1 = new c1; $c1->say(); // 輸出 b0 : hello from b0. b1 : hello from b1. c1 : hello from c1. echo '<br />'; $c2 = new c2; $c2->say(); // 輸出 b1 : hello from b1. b0 : hello from b0. c2 : hello from c2.
這個例子的結構和上一個例子十分相似。我們為你準備了b0和b1兩個trait,并定義了一個c1類和c2類分別使用了不同的b1和b0順序。我們定義了一個say方法,分別繼承了b0和b1的say方法并實現了新的功能。在這個例子當中,我們再次可以看到parent的重要性,因為我們的say方法是對于traits和類的呈現,當我們用父類調用時必須非常小心。在上述例子中,c1中使用的繼承是從b0進入到b1,但使用寄生式的c2中,使用的是從b1到b0的繼承。當我們對c1和c2分別調用say方法時,輸出的結果也有明顯的差異。
總體來說,PHP Parent Trait是Trait的一個非常重要的特性,對于我們的代碼復用和組合方面有非常強大的作用。不過,在使用Parent Trait的時候,為了保證代碼的正確性,我們需要嚴格遵守Trait的繼承關系,才能更好的發揮parent的作用。