1. 程式人生 > >PHP中的traits快速入門

PHP中的traits快速入門

urn 自動 手動 出現 png 搜索引擎 行修改 進行 如何使用

traits

在學習PHP的過程中,我們經常會翻閱PHP的官方手冊。一般理解能力強悍的人多閱讀幾遍便可輕松理解其中要領,但往往更多的初學者對官方文檔中寥寥數語的描述難以理解。作為一個曾有同樣困擾的人,我的經驗是遇到這種情況的時候,首先使用搜索引擎翻閱他人分享的學習成果,當知其一二有了概念以後隨手寫下一些文檔,方便鞏固知識,日後在工作中有需要時再去深入細節。

traits是什麽?

首先我們先對這個知識有一個基本的概念,你可以先將traits理解成類似include用於代碼復用的技術,include針對的是一個類或者其他文件,而traits則是一個針對方法結構的技術,我們使用use關鍵字就可以將結構體引用到當前的class當中。

需求

技術分享圖片

圖中一共存在五個類,分別是基類A以及其子類BCD和一個完全獨立的E類,我們有兩個方法getSum,getSub。我們需要在B,C,E中同時包含這兩個方法,但D類中不包含

這時候,我們第一個想法大都會是

1.在B,C,E中復制同樣的代碼實現這兩個方法。

2.定義一個接口讓B,C,E去實現。

在沒有traits之前可能我們大部分人正是如此去實現需求,不管哪種方法最終的方式都是復制代碼重用

然而這些方式的弊端是

1.繁復的復制工作造成的代碼冗余。

2.不具備靈活性當需要添加新的方法時每個地方都要修改,難以維護。

traits的出現正是為了解決上述問題

如何使用traits

使用traits的方式很簡單,和我們定義類的方式相像,除了關鍵字以為其余一致。

<?php

trait myCode {

    public function getSum($n1, $n2) {
        return $n1 + $n2;
    }

    public function getSub($n1, $n2) {
        return $n1 - $n2;
    }

}

當定義好一個結構體後我們只需要在類裏面使用use關鍵字進行調用,根據我們上面的需求我們在B,C,E中分別use myCode這個tratis

<?php

trait myCode {

    public function getSum($n1
, $n2) { return $n1 + $n2; } public function getSub($n1, $n2) { return $n1 - $n2; } } class A { } class B extends A { use myCode; } class C extends A { use myCode; } class D extends A { } class E { use myCode; } $b = new B(); echo ‘B調用tratis中的方法成功,方法結果為:‘ . $b->getSum(10, 20) . ‘</br>‘; $c = new C(); echo ‘C調用tratis中的方法成功,方法結果為:‘ . $c->getSum(10, 20) . ‘</br>‘; $e = new E(); echo ‘E調用tratis中的方法成功,方法結果為:‘ . $e->getSum(10, 20) . ‘</br>‘;

在代碼中我們分在每個類中調用了我們定義的方法結構,從而我們不需要在每個類中對方法進行描述,因為程序已經將tratis中的方法自動添加到了每一個類中,這樣我們就見面了各種手動繁復的操作,而如果程序後期需要對這幾個類拓展的時候只需要對定義的tratis進行修改就可以達到預設的目的,極大地提交了可維護性。

運行這段代碼的返回結果為:

技術分享圖片

最終我們的程序結構如下

技術分享圖片

這樣我們就算是對tratis進行了一個簡單入門,但應該已經滿足我們日常開發的需求;

如果你需要深入了解更多細節可以參閱一下文章

1.https://blog.csdn.net/qq_16142851/article/details/80437560

2.https://segmentfault.com/a/1190000008009455

PHP中的traits快速入門