您好,登錄后才能下訂單哦!
php中的traits有什么用?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
簡介
Traits是面向?qū)ο缶幊讨惺褂玫囊环N概念,它表示一組可用于擴(kuò)展類功能的方法。Traits提供了一組實(shí)現(xiàn)行為的方法,并要求來實(shí)現(xiàn)一組參數(shù)化所提供行為的方法。對于對象間的通信(以及對象之間的共享),特性在面向?qū)ο蟮膮f(xié)議(接口)和mixin之間有所不同。界面可以通過方法簽名來定義一個(gè)或多個(gè)行為,而特征通過完整的方法定義來定義行為:即,它包括方法的主體。相比之下,mixin包含完整的方法定義,并且還可以通過成員變量攜帶狀態(tài),而特征通常不會。
使用
首先看下官方文檔給出的例子:
<?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */ } ?>
從上面的例子可以看出,特性集ezcReflectionReturnInfo
包含了兩個(gè)方法:getReturnType
和getReturnDescription
,而下面的兩個(gè)子類分別繼承自不同的父類,卻可以通過use ezcReflectionReturnInfo
來復(fù)用這兩個(gè)方法。簡單方便。
注意事項(xiàng)
如果子類、父類、use的traits中存在重名方法,那么這三個(gè)方法的優(yōu)先級為:子類 > tratis > 父類;
可以同時(shí)use多個(gè)traits,但不可use重名的traits;
如果use的多個(gè)traits中存在方法名沖突,可以使用指定某個(gè)方法來自于某個(gè)tratis。例如:
<?php trait A { public function smallTalk() { echo 'a'; } public function bigTalk() { echo 'A'; } } trait B { public function smallTalk() { echo 'b'; } public function bigTalk() { echo 'B'; } } class Talker { use A, B { B::smallTalk insteadof A; A::bigTalk insteadof B; } }
方法可以使用as來設(shè)置別稱,但只在該類有效。
class Aliased_Talker { use A, B { B::smallTalk insteadof A; A::bigTalk insteadof B; B::bigTalk as talk; } }
使用as的時(shí)候,還可以改變方法的可見性。
class MyClass2 { use HelloWorld { sayHello as private myPrivateHello; } }
traits可以嵌套,例如A可以use B。
<?php trait Hello { public function sayHello() { echo 'Hello '; } } trait World { public function sayWorld() { echo 'World!'; } } trait HelloWorld { use Hello, World; }
traits中可以定義abstract方法,同樣的,use該traits的class,也需要實(shí)現(xiàn)這些abstract的方法;
traits中可以定義常規(guī)變量、靜態(tài)的變量和方法;
關(guān)于php中的traits有什么用問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。