PHP中的trait是什麼
自PHP5.4.0起,PHP實現了一種代碼複用的方法,稱為Trait。因為PHP是單繼承,當你需要多個區別的特性,就不得不去組合多個基類,Trait出現後就避免了這些問題,Trait的優勢就是可以隨意組合。以下是小編為大家搜索整理的PHP中的trait是什麼,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!
trait
trait 是在一些類(Class)的應該具備的特定的屬性或方法,而同父級的另外一些類應該避免包含這些屬性和方法情況下使用的.
當然, 這也和開發者對類的抽象能力有關, 有些抽象能力好的, 可以減少對 trait 的使用 但是這種情況應該是無法避免的' 不然 trait 出現就毫無意義了.
還有一種情況, 就是使用 trait 的時候, 可以起到的約束開發者的作用, 提醒開發者注意需要在開發的過程中調用 trait 的某些屬性和方法.
同事則提出了一個好問題, 接口(interface) 不也是這個作用麼?
不急, 讓我們先看個例子:
比如你要收集網站上各類數據, 開發了 Spider 類. Spider 有個方法叫 request() 負責請求.
但是採集數據的過程中, 有些網站對蜘蛛敏感有些則不. 對於敏感的網站, 我們給出了一個使用代理的解決方案. 但是使用代理是會影響抓取速度的. 這就產生了 Spider 的子類有些需要用代理, 而能不用代理則儘量不用的情況.
於是這個時候我們新增了一個 trait Proxy:
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 的用法再這裏已經很有效了吧.
後話
有人可能決定 另外實現一個 request 比如叫, proxyRequst 不就完了麼? 你説的好有道理…然是如果我使用了不一樣的 代理具體對請求上有細節差異怎麼辦呢? 在代碼裏不停的 if if if 麼? trait 如此清爽的方案 為何要放棄呢?
-
PHP基礎語言方面的筆試題和答案
伴隨着Facebook的成功,PHP這門解釋型的Web開發語言由於其清晰的定位繼續受到非常多的關注,當然對於中小企業和個人來説,Linux+Apache/Nginx+PHP+MySQL幾乎不用考慮服務器環境方面的成本;而對於開發者來説,在中小型項目開發中PHP也非常容易上手。以下是本站小編精心...
-
PHP時間和日期函數怎麼操作
php函數的多樣化和功能相近真是一大特點,同一個應用可以用多種函數實現,這恐怕也是開源的一個弊端了;通過對PHP時間函數的系統學習,充分理解了時間戳和時區的概念(這個真的很重要),有需要的小夥伴可以參考下。PHP中所有函數都是UNIX紀元的,即從1970年1月1日開始的。日...
-
PHP常用函數總結
PHP的常用函數有哪些呢?下面是由本站小編為大家整理的PHP常用函數總結,喜歡的可以收藏一下!瞭解更多詳情資訊,請關注應屆畢業生考試網!數學函數():求絕對值$abs=abs(-4.2);//4.2數字絕對值數字():進一法取整echoceil(9.999);//10浮點數進一取整r():捨去法取整ech...
-
PHP緩存技術
PHP具有非常強大的功能,所有的CGI的功能PHP都能實現,而且支持幾乎所有流行的數據庫以及操作系統。最重要的是PHP可以用C、C++進行程序的擴展!以下是小編為大家搜索整理的PHP緩存技術,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!全頁面靜態...
相關文章
- The relationship between theory and practice大學英語作文
- 有關JavaScript中的prototype.bind()方法介紹
- partnership的中文是什麼意思
- PHP中的Streams是什麼
- great expectations的中文翻譯是什麼
- 理解javascript中的with關鍵字是什麼意思
- Thinkpad筆記本開機顯示Tointerrruptnormalstartup解決方法
- relationship的中文是什麼意思
- The Best Thing That Could Ever Happen少兒雙語閲讀
- php中php://input和$-POST有什麼不同