91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

trait函數怎么在PHP中使用

發布時間:2021-01-14 15:24:57 來源:億速云 閱讀:135 作者:Leah 欄目:開發技術

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

trait

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

當然, 這也和開發者對類的抽象能力有關, 有些抽象能力好的, 可以減少對 trait 的使用 但是這種情況應該是無法避免的 不然 trait 出現就毫無意義了.

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

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

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

比如你要收集網站上各類數據, 開發了 Spider 類. Spider 有個方法叫 request() 負責請求.

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

但是采集數據的過程中, 有些網站對蜘蛛敏感有些則不. 對于敏感的網站, 我們給出了一個使用代理的解決方案. 但是使用代理是會影響抓取速度的. 這就產生了 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() 方法, 限定了在沒有調用代理的情況下調用會拋出異常.

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永寿县| 平远县| 土默特右旗| 兰坪| 平和县| 井冈山市| 和平县| 西贡区| 马山县| 内乡县| 当阳市| 库伦旗| 浦东新区| 阜康市| 二连浩特市| 常州市| 新闻| 仙游县| 柳河县| 西平县| 朝阳区| 清原| 增城市| 成都市| 海门市| 灵宝市| 衡阳县| 孟津县| 闵行区| 滨州市| 龙江县| 扬州市| 连江县| 电白县| 防城港市| 察哈| 台前县| 子洲县| 阿尔山市| 海兴县| 汕尾市|