成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

PHP中Trait的用法及示例

PHP中Trait的用法及示例

PHP是單繼承的語言,在PHP 5.4 Traits出現(xiàn)之前,PHP的類無法同時從兩個基類繼承屬性或方法,為了解決這個問題,php出了Trait這個特性。(Traits和Go語言的組合功能有點(diǎn)類似)

用法:通過在類中使用use關(guān)鍵字聲明要組合的Trait名稱,而具體某個Trait的聲明使用trait關(guān)鍵詞,Trait不能直接實(shí)例化。

<?php trait Drive {     public $carName = 'BMW';     public function driving() {         echo "driving {$this->carName}n";     } }   class Person {     public function age() {         echo "i am 18 years oldn";     } }   class Student extends Person {     use Drive;     public function study() {         echo "Learn to drive n";     } }   $student = new Student(); $student->study();  //輸出:Learn to drive  $student->age();    //輸出:i am 18 years old $student->driving();//輸出:driving BMW

結(jié)論:

Student類通過繼承Person,有了age方法

通過組合Drive,有了driving方法和屬性carName。

如果Trait、基類和本類中都存在某個同名的屬性或者方法,最終會保留哪一個呢?通過下面的代碼測試一下:

<?php   trait Drive {     public function hello() {         echo "hello 周伯通n";     }     public function driving() {         echo "周伯通不會開車n";     } }   class Person {     public function hello() {         echo "hello 大家好n";     }     public function driving() {         echo "大家都會開車n";     } }   class Student extends Person {     use Drive;//trait 的方法覆蓋了基類Person中的方法,所以Person中的hello 和driving被覆蓋     public function hello() {         echo "hello 新學(xué)員n";//當(dāng)方法或?qū)傩酝麜r,當(dāng)前類中的方法會覆蓋 trait的 方法,所以此處hello會覆蓋trait中的         hello     } }   $student = new Student(); $student->hello();    //輸出:hello 新學(xué)員 $student->driving();  //輸出:周伯通不會開車

結(jié)論:當(dāng)方法或?qū)傩酝麜r,當(dāng)前類中的方法會覆蓋 trait的 方法,而 trait 的方法又覆蓋了基類中的方法。

如果要組合多個Trait,通過逗號分隔 Trait名稱:

use Trait1, Trait2;

如果多個Trait中包含同名方法或者屬性時,會怎樣呢?答案是當(dāng)組合的多個Trait包含同名屬性或者方法時,需要明確聲明解決沖突,否則會產(chǎn)生一個致命錯誤。

<?php trait Trait1 {     public function hello() {         echo "Trait1::hellon";     }     public function hi() {         echo "Trait1::hin";     } }   trait Trait2 {     public function hello() {         echo "Trait2::hellon";     }     public function hi() {         echo "Trait2::hin";     } }   class Class1 {      use Trait1, Trait2; }   //輸出:Fatal error:  Trait method hello has not been applied, because there are collisions with other trait  methods on Class1 in

使用insteadof和as操作符來解決沖突,insteadof是使用某個方法替代另一個,而as是給方法取一個別名,具體用法請看代碼:

<?php trait Trait1 {     public function hello() {         echo "Trait1::hello n";     }     public function hi() {         echo "Trait1::hi n";     } } trait Trait2 {     public function hello() {         echo "Trait2::hellon";     }     public function hi() {         echo "Trait2::hin";     } } class Class1 {     use Trait1, Trait2 {         Trait2::hello insteadof Trait1;         Trait1::hi insteadof Trait2;     } }   class Class2 {     use Trait1, Trait2 {         Trait2::hello insteadof Trait1;         Trait1::hi insteadof Trait2;         Trait2::hi as hei;         Trait1::hello as hehe;     } }   $Obj1 = new Class1(); $Obj1->hello(); $Obj1->hi(); echo "n"; $Obj2 = new Class2(); $Obj2->hello(); $Obj2->hi(); $Obj2->hei(); $Obj2->hehe();

輸出

Trait2::hello Trait1::hi    Trait2::hello Trait1::hi  Trait2::hi Trait1::hello
<?php trait Hello {     public function hello() {         echo "hello,我是周伯通n";     } } class Class1 {     use Hello {         hello as protected;     } } class Class2 {     use Hello {         Hello::hello as private hi;     } } $Obj1 = new Class1(); $Obj1->hello(); # 報致命錯誤,因?yàn)閔ello方法被修改成受保護(hù)的   $Obj2 = new Class2(); $Obj2->hello(); # 輸出: hello,我是周伯通,因?yàn)樵瓉淼膆ello方法仍然是公共的 $Obj2->hi();  # 報致命錯誤,因?yàn)閯e名hi方法被修改成私有的
Uncaught Error: Call to protected method Class1::hello() from context '' in D:webmytestp.php:18

Trait 也能組合Trait,Trait中支持抽象方法、靜態(tài)屬性及靜態(tài)方法,測試代碼如下:

<?php trait Hello {     public function sayHello() {         echo "Hello 我是周伯通n";     } }   trait World {     use Hello;     public function sayWorld() {         echo "hello worldn";     }     abstract public function getWorld();     public function inc() {         static $c = 0;         $c = $c + 1;         echo "$cn";     }     public static function doSomething() {         echo "Doing somethingn";     } }   class HelloWorld {     use World;     public function getWorld() {         return 'do you get World ?';     } }   $Obj = new HelloWorld(); $Obj->sayHello(); $Obj->sayWorld(); echo $Obj->getWorld() . "n"; HelloWorld::doSomething(); $Obj->inc(); $Obj->inc();

輸出

Hello 我是周伯通 hello world do you get World ? Doing something12

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
99久久99久久免费精品蜜桃 | 国产午夜成人AV在线播放| 新X8X8拨牐拨牐永久免费AP| 高清毛茸茸的中国少妇| 中文字幕V亚洲日本在线| 亚洲AV无码乱码在线观看裸奔 | 成熟交BGMBGMBGM的价格| 97久久天天综合色天天综合色H| 亚洲一区二区自偷自拍另类| 亚洲AV秘 无码一区二黑人| 十八女人毛片A级毛片水真多| 欧美人成人精品视频在线观看| 久久天天躁狠狠躁夜夜网站| 精品国产黑色丝袜高跟鞋| 国产成人精品三级麻豆| 成人毛片亚洲高潮无码精品色| 69ZXX少妇内射无码| 怡红院亚洲第一综合久久| 亚洲裸男GAY自慰网站| 亚洲AV无码AV制服丝袜在线| 亚洲一级 片内射无码| 99精品国产兔费观看久久99| 中文字幕乱人伦高清视频| 办公室被吃奶好爽在线观看| 一本大道东京热无码视频| 亚洲欧洲美洲无码精品VA| 亚洲国产欧美在线人成APP| 亚洲AV秘 无码一区二区三密桃 | 成人区精品一区二区不卡| FREE少妇野战HD| 99久久人妻无码精品系列| 从厨房一路干到卧室好吗| 国精产品W灬源码1688在线| 国产在线无码精品无码| 韩国办公室三级HD激情在线观看| 国产九九久久99精品影院| 国产精品色吧国产精品| 国产日韩一区二区三区在线观看 | 首页 图区 国产 亚洲 欧美| 亚洲GV永久无码天堂网| 亚洲AV中文无码乱人伦在线R▽| 一区二区无码在线视频| 中文字幕久久精品波多野结百度 | 日韩激情在线小视频观看| 日本强伦姧人妻完视频正版| 日韩欧美亚洲综合久久影院D3| 色噜噜天堂AV崩坏星穹铁道| 特级毛片在线大全免费播放| 无码成人精品区在线观看| 无码精品人妻一区二区三区漫画 | 麻豆国产97在线 | 中文| 妺妺窝人体色WWW精品知乎| 欧美XXXX做受欧美88HD| 欧美一区二区三区视频在线观看| 日本精品视频一区二区| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲熟伦熟妇AV无码春| 在线无码一区二区| A级毛片免费观看在线| 成年女人免费观看播放视频| 金瓶梅之爱的奴隶| 久久亚洲AV无码精品色午夜麻| 妺妺窝人体色WWW网站厕所盗摄| 太深太粗太大太猛太爽了视频| 夜夜爽妓女77777免费观看| 国产成人精品视频网站| 免费一看一级毛片少妇丰满2| 西方44大但人文艺术是什么东西| 亚洲国产精品无码久久电影| 拔萝卜电视剧高清免费| 久久国产精品娇妻素人| 欧美VA亚洲VA日韩VA| 亚洲AV无码国产精品永久一区| YOUJIZZ中国少妇| 国产精品VA无码一区二区| 精品国产乱码久久久久久人妻| 日韩精品免费无码专区| 揄拍成人国产精品视频| 宝贝腿开大点我添添公视频免| 久久国产精品99国产精| 未成满18禁止免费无码网站| 亚洲午夜精品久久久久久浪潮| 国产AV无码专区亚洲AV麻豆| 精品国产乱码久久久久夜深人妻| 色噜噜AV亚洲色一区二区| 7777色鬼XXXX欧美色妇| 激情综合色综合啪啪五月丁香搜索| 免费看AV在线网站网址| 深夜成人毛片天堂| 91久久精品www人人做人人爽| 精品国产一区二区三区噜噜噜 | 国产成人精品亚洲午夜麻豆 | 啊~每一次都撞到最里面| 国产精品天天看天天狠| 人人妻人人做从爽精品| 亚洲AV永久无码精品表情包| ASS中国人体欣赏PICS| 国产精品久久久久久久久软件| 久久免费99精品国产自在现线| 西西人体444WWW高清大胆| 俄罗斯大荫蒂女人毛茸茸| 娇妻当着我的面被4P| 无码人妻 在线视频| 性欧美乱妇COME| 巴西大屁股妓女BBW| 免费人成网站在线观看欧美| 亚洲熟妇在线观看| 狠狠色欧美亚洲狠狠色WWW| 欧洲精品99毛片免费高清观看| 一本大道久久东京热无码AV| 韩国三级中文字幕HD| 人妻中文乱码在线网站| 亚洲AV永久无码成人红楼影视| 国产精品久久久久精品A级| 色惰日本视频网站WWW| 波多野结衣TORRENT| 久久精品国产99国产精品澳门| 日本无人区码一码二码三码区别 | 久久婷婷日日澡天天添| 亚洲国产精品久久无码中文字蜜桃| А√天堂中文官网在线BT| 你真紧你这是要我的命吗什么意思| 亚洲AⅤ国产成人AV片妓女| GOGO人体GOGO西西大尺度| 男人激烈吮乳吃奶动态图| 亚洲成AV人片在线观看福利| 国产女人精品视频国产灰线| 午夜DJ影院免费直播观看完整版| JIZZ成熟丰满韩国女人.| 极品尤物被啪到呻吟喷水| 亚洲AV午夜国产精品无码中文字| 国产性一交一乱一伦一色一情| 午夜无码无遮挡在线视频| 国产女人被狂躁到高潮小说| 性少妇FREESEXVIDEO| 波多野结衣456| 人与禽交VIDEOSGRATI| 成人A级毛片免费观看AV网站| 撒尿BBWBBW| AV一区二区三区人妻少妇| 欧美日韩精品一区二区三区不卡 | けんじゃたいむMANA原神| 人妻丰满熟妇AV无码区免| 真人荫道口图片100张| 免费A级毛片无码专区| 99亚偷拍自图区亚洲| 人妻人妇人妻一区二区三区| 菠萝视频高清视频在线7| 色偷偷AV男人的天堂| www.AV无码| 日韩综合无码一区二区| 国产成人牲交在线观看视频| 日本十八禁免费看污网站| 国产96在线 | 亚洲| 欧美一区二区三放荡人妇| 把腿张开老子臊烂h视频| 少女たちよ在线观看动漫在线观看 | 亚洲Av无码一区二区三区大黄瓜| 姬小满无限奖励别人的英雄| 一炕四女被窝交换啪啪| 欧美黑人暴力深喉囗交| 中文无码乱人伦中文视频在线| 精品久久久无码人妻中文字幕豆芽 | 国产AV无码专区亚洲AV| 亚洲AV无码久久久久久精品同性 | 中文国产成人精品久久APP| 欧洲无人区天空码头IV在哪一本| 中文字幕人妻一区二区在线视频 | JIZZJIZZJIZZ亚洲熟| 色偷偷偷久久伊人大杳蕉| 国内精品人妻久久毛片APP| 影音先锋女人AV女色资源| 人妻AV无码系列专区移动可看 | 免费一区二区三区成人免费视频 | 交换人生俱乐部全文免费阅读| 在线天堂中文最新版| 日韩精品一区二区三区影院| 国产在线精品无码二区二区| 亚洲午夜理论片在线观看| 人妻AV中文字幕一区二区三区| 国产精品久久久久精品日日| 亚洲色爱图小说专区| 精品高潮呻吟99AV无码视频| 13学生小美女洗澡裸体视频| 男人J进女人P免费视频在线直播| 地师传人电影在线观看| 色妓AV人妻一区二区三区| 狠狠久久亚洲欧美专区| 9420高清完整版在线观看| 铜铜铜铜铜铜铜好多水谜妹| 国产96在线 | 国产| 亚洲人成色777777精品音频| 欧美亚洲另类 丝袜综合网| 国产精品香蕉在线观看网| 真人一进一出抽搐GIF免费动图| 少妇饥渴偷公乱A级无码| 国产成人精品视频ⅤA秋霞影院| 亚洲色欲色欲WWW在线看小说| 日本高清视频色WWW色| 狠狠做深爱婷婷综合一区|