亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP Trait代碼復用類與多繼承實現方法詳解

2024-05-05 00:09:41
字體:
來源:轉載
供稿:網友

本文實例講述了PHP Trait代碼復用類與多繼承實現方法。分享給大家供大家參考,具體如下:

前言

眾所周知,一直以來PHP和很多語言一樣是單繼承的語言,但是常常在編碼過程中,我們需要在當前類中使用兩個或兩個以上的其他類的方法,這種情況下繼承就不能實現,而往往采用new方式實例化很多要用到的類,這樣就會很影響代碼的結構和開發規范。于是Trait類誕生了,它是一種代碼復用的語法,能夠實現一個類中引用多個其他類的方法。

一、概念

PHP官方手冊對Trait的描述是:
Trait是為類似PHP的單繼承語言而準備的一種代碼復用機制。Trait為了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類中復用method。Trait和Class組合的語義定義了一種減少復雜性的方式,避免傳統多繼承和Mixin類相關典型問題。
Trait和Class相似,但僅僅旨在用細粒度和一致的方式來組合功能。無法通過trait自身來實例化。它為傳統繼承增加了水平特性的組合;也就是說,應用的幾個Class之間不需要繼承。

二、Trait類的使用

簡單地講,Trait就是一種不同于繼承的語法,定義一個trait類,在其他類中使用它則是采用use關鍵字,有點類似于命名空間的用法,但是含義不同。use關鍵字在一個類中引入Trait類后,相當于require或include了一段代碼進來,不同之處在于use的Trait類與當前類是可以看做同一個類的,即當前類可以用$this關鍵字調用Trait類的方法。

以下是原理解釋:

PHP,Trait,代碼復用,多繼承

可以看出當前類可以簡單地use兩個Trait類,并調用其中的方法,而不僅限于繼承,只能使用一個父類的方法。

三、Trait類的訪問控制

我們知道,繼承的方式,如果基類是private修飾控制的,則子類是無法調用的。但是Trait不一樣,因為它類似于Require到當前類中了,所以不管是public、protected或private都是可以直接使用的。示例如下:

PHP,Trait,代碼復用,多繼承

四、Trait類的優先級控制

Trait類與當前使用類、繼承的基類之間的調用優先級順序如下:
當前使用類>Trait類>繼承的基類

當存在同名方法時,會根據優先級覆蓋掉同名的類。具體示例如下:

1、Trait類覆蓋基類

PHP,Trait,代碼復用,多繼承

2、當前類覆蓋Trait類

PHP,Trait,代碼復用,多繼承

五、多個Trait類的沖突控制

在PHP中,如果當前類use了兩個Trait類,同時兩個trait類都存在一個同名的方法,此時如果沒有明確解決沖突將會產生一個致命錯誤。
對于這種情況,PHP官方給出了兩個解決方案:
1、insteadof關鍵字:通過該關鍵字指定方法名沖突時該使用哪個Trait類的方法,即:
如果C類use了A、B兩個Trait類,且A、B兩個類都存在a、b方法,則在C類use A、B類時使用insteadof聲明沖突的解決方法即可:

use A, B {  B::a insteadof A; //a方法沖突時使用B類的a方法而不使用A類的a方法  A::b insteadof B; //b方法沖突時使用A類的b方法而不使用B類的b方法}

2、as關鍵字:通過as關鍵字將同名方法指定為一個別名,且僅作用于當前類中。示例如下:

use A, B {  B::a as c; //聲明B類的a方法為c,作用于該類  A::b as d; //聲明A類的b方法為d,作用于該類}

六、與繼承、直接實例化的區別

對于當前一個類需要用到另一個或多個類的方法的情況,我們一般會想到的方式有繼承、直接實例化另外一個或多個類等等的方法,下面來對比一下這些方法和Trait類的區別:
1、繼承方式:對于繼承,可以完美地復用另一個類的一些方法,但是對于需要復用多個類的方法時,PHP是不支持多繼承的,而且只能訪問public和protected方法;
2、與直接實例化的區別:我們也可以在當前類中直接實例化要用到的A類與B類,但是這種方法在控制訪問范圍反面,只允許訪問A、B類中public的方法;
3、使用Trait類則完全將A、B兩個類的方法導入到當前類中,可以視為當前類的一部分,唯一區別是可以存在于當前類同名的方法,此時由優先級順序來控制。

補充:PHP多繼承示例

class Base{  public function sayHello(){    echo "hello ";  }}trait SayWorld{  public function sayHello(){    parent::sayHello();    echo "world".PHP_EOL;  }}trait SayWorld2{  public function sayHello2(){    echo "PHP".PHP_EOL;  }}class MyHelloWorld extends Base{  use SayWorld,SayWorld2;}$s = new MyHelloWorld();$s->sayHello();$s->sayHello2();

輸出結果:

hello  world
PHP

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合久综合久久综合久鬼88| 亚洲欧洲中文天堂| 国产精品香蕉国产| 国产日韩欧美夫妻视频在线观看| 亚洲欧美日韩中文在线| 国产精品第一页在线| 久久99青青精品免费观看| 色www亚洲国产张柏芝| 夜夜嗨av色一区二区不卡| 深夜成人在线观看| 91国产美女视频| 中文字幕亚洲字幕| 久久久久久九九九| 中文字幕亚洲综合| 亚洲乱码国产乱码精品精天堂| 欧美电影免费在线观看| 亚洲乱码一区二区| 精品电影在线观看| 亚洲成av人乱码色午夜| 日韩精品在线第一页| 亚洲性av在线| 国产精品专区第二| 欧美激情免费看| 97国产在线视频| 亚洲欧美综合区自拍另类| 国产伦精品一区二区三区精品视频| 色综合天天狠天天透天天伊人| 亚洲人精选亚洲人成在线| 97免费视频在线| 久久久999精品免费| 亚洲 日韩 国产第一| 国产精品网红福利| 久久久国产视频| 国产91久久婷婷一区二区| 久久精品色欧美aⅴ一区二区| 韩国精品久久久999| 欧美激情在线观看| 青草青草久热精品视频在线网站| 亚洲一区二区三区成人在线视频精品| 欧美制服第一页| 国产精品日韩久久久久| 成人国产精品免费视频| 欧美老女人bb| 欧美裸身视频免费观看| 亚洲色图15p| 美女精品视频一区| 久久精品国产一区| 日韩动漫免费观看电视剧高清| 91中文在线观看| 在线观看中文字幕亚洲| 91香蕉国产在线观看| 成人在线中文字幕| 精品国内自产拍在线观看| 亚洲激情视频网站| 国产噜噜噜噜久久久久久久久| 免费av在线一区| 中文字幕久精品免费视频| 久久久精品国产网站| 日韩av在线网页| 18性欧美xxxⅹ性满足| 国产精品视频公开费视频| 久久精品国产亚洲一区二区| 久久久久久久一区二区三区| 精品国产欧美一区二区三区成人| 欧美中文在线观看国产| 大荫蒂欧美视频另类xxxx| 深夜福利国产精品| 美日韩精品免费观看视频| 久久久999国产| 国产精品久久久av| 日韩成人av在线| 久久久久国色av免费观看性色| 成人h猎奇视频网站| 久久国产天堂福利天堂| 在线精品高清中文字幕| 欧美大尺度电影在线观看| 欧美成人一区在线| 欧美亚洲成人免费| 色综合91久久精品中文字幕| 精品久久久久久久大神国产| 国产69精品久久久久99| 亚洲福利视频在线| 97精品国产97久久久久久| 欧美激情亚洲另类| 欧洲成人在线观看| 青青精品视频播放| 久久视频在线播放| 亚洲国产成人精品女人久久久| 夜夜嗨av色综合久久久综合网| 国产69精品久久久久久| 亚洲欧洲第一视频| 亚洲成人精品视频在线观看| 亚洲精品在线看| 国产在线精品播放| 国产精品极品美女在线观看免费| 一区二区日韩精品| 中文字幕av一区中文字幕天堂| 亚洲欧美www| 国产日本欧美在线观看| 91在线看www| 国产精品久久激情| 伊是香蕉大人久久| 成人精品一区二区三区电影免费| 日韩精品视频在线观看网址| 欧美激情亚洲视频| 国产成人av网址| 91精品国产91久久久久久吃药| 日韩精品极品在线观看| 国产女精品视频网站免费| 亚洲国产欧美一区二区三区同亚洲| 欧美大全免费观看电视剧大泉洋| 91精品免费视频| 亚洲午夜性刺激影院| 亚洲码在线观看| 国产69精品久久久久久| 国产精品免费视频久久久| 欧美黑人一级爽快片淫片高清| 久久亚洲综合国产精品99麻豆精品福利| 成人妇女淫片aaaa视频| 日韩电视剧在线观看免费网站| 日韩欧美亚洲范冰冰与中字| 久久777国产线看观看精品| 日韩精品免费在线| 欧美日韩精品二区| 91香蕉嫩草影院入口| 热久久99这里有精品| 国产精品久久久久77777| 国产精品国产亚洲伊人久久| 亚洲成人a级网| 亚洲精品福利免费在线观看| 久久久噜久噜久久综合| 精品亚洲精品福利线在观看| 国产91精品黑色丝袜高跟鞋| 欧美猛男性生活免费| 国产欧美最新羞羞视频在线观看| 91在线中文字幕| 欧美激情小视频| 欧美久久精品午夜青青大伊人| 欧美激情综合色| 亚洲国产成人精品久久久国产成人一区| 国产精品香蕉在线观看| 国产亚洲欧洲在线| 欧美日韩国产丝袜美女| 91在线无精精品一区二区| 久久综合五月天| 日韩在线视频线视频免费网站| 一区二区三区四区在线观看视频| 91免费欧美精品| www.xxxx精品| 一区二区三区www| 亚洲精品国产欧美| 欧美中文在线视频| www.99久久热国产日韩欧美.com| 日韩欧美在线观看| 最近免费中文字幕视频2019| 日韩中文字在线| 久久国产天堂福利天堂| 欧美丰满片xxx777| 亚洲网站视频福利| 亚洲国内精品视频| 亚洲片国产一区一级在线观看| 亚洲白虎美女被爆操| 国产精品99导航| 国产免费一区二区三区在线能观看|