traits和interfaces的區(qū)別是什么-創(chuàng)新互聯(lián)
創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
traits和interfaces的區(qū)別是什么?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
interface我們在大型項(xiàng)目開發(fā)中使用,用于約束團(tuán)隊(duì)協(xié)作的,interface接口規(guī)定沒有定義的函數(shù),其他開發(fā)人員繼承,必須在按照里面的名稱進(jìn)行定義,不能少一個(gè)函數(shù)也不能多一個(gè)函數(shù),這樣就能約束和管理其他開發(fā)者。
PHP是單繼承的語言,在PHP 5.4 Traits出現(xiàn)之前,PHP的類無法同時(shí)從兩個(gè)基類繼承屬性或方法。php的Traits和Go語言的組合功能有點(diǎn)類似,
通過在類中使用use關(guān)鍵字聲明要組合的Trait名稱,而具體某個(gè)Trait的聲明使用trait關(guān)鍵詞,Trait不能直接實(shí)例化。
traits與interfaces的區(qū)別是:
1、trait
看上去更像是為了代碼的復(fù)用而寫的一個(gè)小插件,它類似于include,可以用use放在類中間,讓trait里面定義的方法作為class的一部分,本身不能直接實(shí)例化。
2、interface
里面的方法都是虛擬的,需要在繼承的時(shí)候?qū)@些方法進(jìn)行重定義。也就是說,方法是說明性質(zhì)的,并沒有實(shí)際操作,而你在繼承的時(shí)候,需要實(shí)現(xiàn)這些方法,不然就會(huì)出錯(cuò),而且不能缺失。interface經(jīng)常用于架構(gòu)的時(shí)候,對一個(gè)實(shí)例所擁有的屬性和方法進(jìn)行抽象定義。簡單來講類似一個(gè)協(xié)議,是老板下達(dá)的任務(wù)。你要繼承的話,必須滿足這個(gè)協(xié)議,也就是完成老板下達(dá)的任務(wù)。
var."
"; } function a() { echo "a"."
"; } } interface MyInterface { function __construct(); function b(); } abstract class MyAbstract { protected $var2 = 'MyAbstract_var'; use MyTrait; function b() { echo "b"."
"; } } class MyClass extends MyAbstract implements MyInterface { protected $var3 = 'MyClass_var'; function c() { echo "c"."
"; } } $class = new MyClass(); $class->a(); $class->b(); $class->c();
以上代碼中,MyAbstract中的function b()
也可以放在MyClass
中,或者由MyAbstract實(shí)現(xiàn)接口MyInterface
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。
網(wǎng)站欄目:traits和interfaces的區(qū)別是什么-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://www.xueling.net.cn/article/dcodog.html