日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是 Trait

發布時間:2025/4/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是 Trait 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Trait?是從 PHP 5.4 加入的一種細粒度代碼復用的語法。以下是官方手冊對 Trait 的描述:

Trait 是為類似 PHP 的單繼承語言而準備的一種代碼復用機制。Trait 為了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類中復用 method。Trait 和 Class 組合的語義定義了一種減少復雜性的方式,避免傳統多繼承和 Mixin 類相關典型問題。

Trait 和 Class 相似,但僅僅旨在用細粒度和一致的方式來組合功能。 無法通過 trait 自身來實例化。它為傳統繼承增加了水平特性的組合;也就是說,應用的幾個 Class 之間不需要繼承。

什么是 Trait ?

其實說通俗一點,就是能把重復的方法拆分到一個文件,通過?use?引入以達到代碼復用的目的。

那么,我們應該怎么樣去拆分我們的代碼才是合適的呢?我的看法是這樣的:

Trait,譯作?“特性”、“特征”、“特點”?。那么問題就來了:什么才是特性?

一個銷售公司有很多種產品:電視,電腦與鼠標墊,卡通手辦等。其中鼠標墊與卡通手辦是非賣品,只用于贈送。

那么這里的 “可賣性” 就是一個特性,非賣品是沒有價格的。我們便可以抽象出 “可賣性” 這個 Trait 來:

trait Sellable {protected $price = 0; public function getPrice() { return $this->price; } public function setPrice(int $price) { $this->price = $price; } }

當然我們所有的產品都會有品牌與其它基本屬性,所以我們通常會定義一個產品類:

class Pruduct {protected $brand; //... public function __construct($brand) { $this->brand = $brand; } public function getBrand() { return $this->brand; } //... }

我們的電視與電腦類:

class TV extends Pruduct { use Sellable; //... public function play() { echo "一臺 {$this->brand} 電視在播放中..."; } //... } class Computer extends Pruduct { use Sellable; protected $cores = 8; //... public function getNumberOfCores() { return $this->cores; } //... }

而鼠標墊與手辦等禮品是不可賣的:

class Gift extends Pruduct { protected $name; function __construct($brand, $name) { parent::__construct($brand); $this->name = $name; } //... }

上面的這個例子中,“可賣性” 便是部分商品的一個特性,也可以理解為商品的一個歸類。你也許會說,我也可以再添加一個 Goods 類來完成上面的例子啊,Goods 繼承 Product,再讓所有可賣的商品繼承于 Goods 類,把價格屬性與方法寫到 Goods 里,同樣可以代碼復用啊。的確,這沒啥問題。但是你會發現:你有多個需要區別的特性時,由于 PHP 只有單繼承的原因,你不得不組合很多個基類出來,將他們層疊,最終得到的樹狀結構是很復雜的。這也是 Trait 所帶來的優勢:隨意組合,代碼清晰。

其實還有很多例子,比如可飛行的,那么把飛行這個特性所具有的屬性(如:高度,距離)與方法(如:起飛,降落)放到一個 trait 就是一個合理的拆分。

Trait 有什么優勢 ?

trait 有什么優勢?來看一段代碼:

class User extends Model { use Authenticate, SoftDeletes, Arrayable, Cacheable; ... }

這個用戶模型類,我們引入了四個特性:注冊與授權、軟刪除、數組式操作、可緩存。

我們看到代碼的時候一眼便知道當前支持了哪些個特性。再看下面另外一種寫法:

abstract AdvansedUser {// ... 實現了 Authenticate, SoftDeletes, Arrayable, Cacheable 的所有方法 } class User extends AdvansedUser { ... }

你不得不再去閱讀?AdvansedUser?的代碼才能理解。你想說沒有可讀性是因為我基類的名稱沒起好?可是,這種各種特性組合的一個基類是根本無法起一個見名知義的名稱的,不信你可以試一下。

就算你真的起了一個見名知義的名稱:AuthenticateCacheableAndArrayableSoftDeletesUser,可是當需求變更,要求在?FooUser(同樣繼承了這個基類) 中去除緩存特性,而?User?類保留這個特性,怎么辦?再創建一個基類么?

這就是我理解的 Trait:

它不僅僅是可復用代碼段的集合,它應該是一組描述了某個特性的的屬性與方法的集合。它的優點在于隨意組合,耦合性低,可讀性高。

平常寫代碼的時候也許怎么拆分才是大家的痛點,分享以下幾個技巧:

  • 從需求或功能描述拆分,而不是寫了兩段代碼發現代碼一樣就提到一起;
  • 拆分時某些屬性也一起帶走,比如上面第一個例子里的價格,它是“可賣性”必備的屬性;
  • 拆分時如果給 Trait 起名困難時,請認真思考你是否真的拆分對了,因為正確的拆分是很容易描述 “它是一個具有什么功能的特性” 的;

總之一定要記住:不要為了讓兩段相同的代碼提到一起這樣簡單粗暴的方式來拆分。

以上是個人見解,歡迎各位討論。??

?

from:http://overtrue.me/articles/2016/04/about-php-trait.html

轉載于:https://www.cnblogs.com/shynshyn/p/7928712.html

總結

以上是生活随笔為你收集整理的什么是 Trait的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费黄色的网站 | www久久久久久| 日韩精品视频中文字幕 | 日韩精品电影一区二区三区 | 日日干综合| 肉色超薄丝袜脚交一区二区图片 | 亚洲熟女乱色综合亚洲小说 | 波多野结衣人妻 | 欧美丰满bbw | 国产三级精品三级在线 | 91玉足脚交嫩脚丫在线播放 | 日本不卡在线视频 | 91大神福利视频 | 少妇精品久久久一区二区三区 | 色一情一伦一子一伦一区 | 亚洲免费福利 | 毛片9| 精品av一区二区 | 亚洲砖区区免费 | hs视频在线观看 | 4438x亚洲最大 | 丰满少妇xoxoxo视频 | 毛片a| 久久亚洲国产 | 国产熟妇搡bbbb搡bbbb搡 | 长河落日电视连续剧免费观看01 | 免费看国产曰批40分钟粉红裤头 | 激情五月激情综合 | 欧美午夜影院 | 夜夜草网站 | 娇妻高潮浓精白浆xxⅹ | 诱惑av| 日韩视频h| 密臀av在线播放 | 成人3d动漫一区二区三区 | 四虎av网站 | 国产女人高潮视频 | 香港台湾日本三级大全 | 亚洲男人网站 | 成人免费毛片男人用品 | 色狠狠一区二区三区香蕉 | 中文字幕一区二区三区日韩精品 | 国外精品视频 | 亚洲午夜小视频 | 超碰黄色| 成人黄色免费在线观看 | 韩国一级淫一片免费放 | 国产大片中文字幕在线观看 | 亚洲天堂av一区二区 | 好爽…又高潮了毛片免费看 | 亚洲高清免费视频 | 欧美亚韩一区二区三区 | 91在线超碰| 操极品女神| 日韩电影网站 | 国产专区自拍 | 亚洲香蕉在线观看 | 少妇的激情| jzzijzzij亚洲成熟少妇在线播放 狠狠躁日日躁夜夜躁2022麻豆 | 国产一区二区三区色淫影院 | 奇米影视在线播放 | 亚洲免费观看视频 | 亚洲论理 | 美女主播福利视频 | 深夜福利免费在线观看 | 警察高h荡肉呻吟男男 | 精品久久国产字幕高潮 | 国产网站精品 | 超碰在线最新 | 已婚少妇美妙人妻系列 | 丝袜人妻一区二区三区 | 久久综合桃花网 | 爱爱爱爱网 | 麻豆精品视频在线观看 | 一区二区视频国产 | 一级性生活大片 | 老司机在线观看视频 | 啪啪小视频 | 伊人网色 | 成人短视频在线免费观看 | 操久久久| 一本一道久久综合狠狠老精东影业 | 亚洲精品视频在线观看免费 | 潘金莲裸体一级淫片视频 | 三级国产三级在线 | 91精品久久久久久粉嫩 | 欧美一区二区在线免费观看 | 欧美午夜视频 | 日本一区二区三区免费观看 | 中文字幕在线视频观看 | 国产精品网站免费 | 欧美中出 | 欧美一区二区激情视频 | 欧洲熟妇的性久久久久久 | 免费精品 | 国产av人人夜夜澡人人爽麻豆 | 免费看操片 | 久久精品久久精品久久精品 | 免费草逼网站 |