trait函數(shù)怎么在PHP中使用-創(chuàng)新互聯(lián)

這篇文章給大家介紹trait函數(shù)怎么在PHP中使用,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)主營柴桑網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā),柴桑h5小程序制作搭建,柴桑網(wǎng)站營銷推廣歡迎柴桑等地區(qū)企業(yè)咨詢

trait


trait 是在一些類(Class)的應(yīng)該具備的特定的屬性或方法,而同父級的另外一些類應(yīng)該避免包含這些屬性和方法情況下使用的.

當(dāng)然, 這也和開發(fā)者對類的抽象能力有關(guān), 有些抽象能力好的, 可以減少對 trait 的使用 但是這種情況應(yīng)該是無法避免的 不然 trait 出現(xiàn)就毫無意義了.

還有一種情況, 就是使用 trait 的時候, 可以起到的約束開發(fā)者的作用, 提醒開發(fā)者注意需要在開發(fā)的過程中調(diào)用 trait 的某些屬性和方法.

同事則提出了一個好問題, 接口(interface) 不也是這個作用么?

不急, 讓我們先看個例子:

比如你要收集網(wǎng)站上各類數(shù)據(jù), 開發(fā)了 Spider 類. Spider有個方法叫 request()負責(zé)請求.

<?php namespace XWSoul\Network;
class Spider
{
 public function request($url)
 {
 //do sth.
 }
}

但是采集數(shù)據(jù)的過程中, 有些網(wǎng)站對蜘蛛敏感有些則不. 對于敏感的網(wǎng)站, 我們給出了一個使用代理的解決方案. 但是使用代理是會影響抓取速度的. 這就產(chǎn)生了 Spider 的子類有些需要用代理, 而能不用代理則盡量不用的情況.

于是這個時候我們新增了一個 trait Proxy:

<?php namespace XWSoul\Network;
trait Proxy
{

 protected $isProxy = false;

 public function useProxy($proxy)
 {
 //do sth proxy setups.
 $this->isProxy = true;
 return $this;
 }

 public function request($url)
 {
 if (!$this->isProxy) {
  throw new Exception("Please using proxy.");
 }
 //do sth.
 return parent::request($url);
 }
}

trait 重寫了 Spider 的request()方法, 限定了在沒有調(diào)用代理的情況下調(diào)用會拋出異常.

回到之前的問題, trait 這樣的用法和 接口(interface) 有什么區(qū)別?

接口的約束是前置的是定義初始就必須實現(xiàn)的, 他可以約束方法的實現(xiàn)卻無法約束方法的調(diào)用, trait 是一種后置的調(diào)用, 他已經(jīng)實現(xiàn)了方法, 關(guān)鍵的是, 他只對調(diào)用了自身的類產(chǎn)生約束(廢話一句), 而對沒有調(diào)用自身的類不產(chǎn)生影響(再一句廢話), 同時他是可復(fù)用的, 而且沒有破壞 Spider 類自身的實現(xiàn)增加, Spider 還是那個 Spider.

關(guān)于trait函數(shù)怎么在PHP中使用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)站標題:trait函數(shù)怎么在PHP中使用-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://muchs.cn/article26/hodcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站導(dǎo)航網(wǎng)站制作、做網(wǎng)站網(wǎng)站設(shè)計、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)