php trait 代码生成,[置頂] 關於PHP trait、生成器

Trait(PHP5.4.0之后才支持)

1、trait跟類相似,但是更輕便,想一下,如果A類和B類都需要一個獲取地理位置的功能,我們通常的解決辦法是寫一個父類,里邊定義一個獲取地理位置的函數,然后A類和B類都繼承它,缺點是讓無關的類有了同一個父類,強制了AB的關聯;還有一種解決辦法是定義一個接口interface,A和B都實現這個接口,這樣的缺點是,同樣一個獲取地理位置的功能要寫兩遍,不符合DRY(Dotn’t repeat yourself)原則;最后推薦使用trait,這更符合模塊化的觀念,實現如下

2、trait定義

123456

trait Geo {protected $myAddress;public function getAddress() {return $this->myAddress;}}

3、使用trait

12345678910111213141516

class A {use Geo;//A類的實現}class B {use Geo;//B類的實現}$a = new A();$b = new B();$a->getAddress(); //A類獲取地理位置$b->getAddress(); //B類獲取地理位置

4、小結:

其實trait就相當於一個可以放到類里的模塊,有啥通用的部分可以提出來,放到trait里邊,然后就不用在不同的類里重復實現了。

生成器(PHP5.5.0之后才支持)

1、生成器就是一個PHP函數,在一個函數中使用yield關鍵字,可以這樣理解,yield是一個大數組,yield關鍵字在這個函數里每出現一次,就會在這個數組里加入一個元素,需要注意的是,生成器不需要返回值,只通過yield產出值,最終返回的是一個Generator對象(就是剛才那個大數組)。

2、優點是占用內存小,下邊是一個生成范圍內數值的例子

1234567891011121314151617181920212223242526272829303132

//常規做法function makeRange($length) {$data = [];for($i=0;$i推薦寫法foreach(makeRange(999999) as $value) {echo $value;}

想了解跟多的知識,請加入627336556  技術開發交流群,會有意想不到的收獲~~~!!!

你可能感兴趣的:(php,trait,代码生成)