亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 8
粉絲 0
評論 3
訪問量 10815
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
演示Trait組合解決命名沖突和修改Trait訪問控制,以及Trait和接口與抽象類混合使用
程東旭
原創(chuàng)
1421人瀏覽過

Trait組合的同名方法的命名沖突的解決方案有哪些, 實例進行演示

演示如何在trait中改變trait成中的訪問控制

代碼部分

  1. <?php
  2. //1.先寫2個trait,使2個trait中有又相同的方法aaa
  3. trait Demo1
  4. {
  5. public function aaa()
  6. {
  7. return __TRAIT__ . '***' . __METHOD__;
  8. }
  9. }
  10. trait Demo2
  11. {
  12. public function aaa()
  13. {
  14. return __TRAIT__ . '---' . __METHOD__;
  15. }
  16. protected function nnn()
  17. {
  18. return __TRAIT__ . '+++' . __METHOD__;
  19. }
  20. }
  21. //1.替代,用Demo1中的aaa替換Demo2中的aaa
  22. class Demo3
  23. {
  24. use Demo1, Demo2{
  25. Demo1::aaa insteadof Demo2;
  26. }
  27. }
  28. $demo = new Demo3;
  29. echo $demo->aaa() , '<hr>';
  30. //2.別名,把Demo2中的aaa取一個別名,客戶端訪問別名
  31. //使用這種方法也必須用第一個Demo1中的aaa替代Demo2中的aaa,否則會出錯
  32. class Demo4
  33. {
  34. use Demo1, Demo2{
  35. Demo1::aaa insteadof Demo2;
  36. Demo2::aaa as bbb;
  37. }
  38. }
  39. $demo = new Demo4;
  40. echo $demo->bbb() , '<hr>';
  41. //3.用as修改trait中成員的訪問控制
  42. //把Demo2種的受保護的aaa修改成為公共的的訪問屬性
  43. //用use+as修改trait中的成員的訪問控制的時候必須要修改發(fā)放的名稱
  44. class Demo5
  45. {
  46. use Demo2{
  47. nnn as public vvv;
  48. }
  49. }
  50. $demo = new Demo5;
  51. echo $demo->vvv() , '<hr>';

總結(jié)

1、當use引用多個trait的時候,如果被引用的不同的trait中存在相同的方法名稱,需要用insteadof進行替代,保留其中一個,如果被替代掉的方法也想使用,需要用as來修改被替代掉方法的別名

2、use+as不僅僅可以替換方法名稱,而且可以修改該方法的訪問控制,但是在修改該方法的訪問控制的時候必須同時修改方法名稱,修改后的方法名稱不能與修改前的方法名稱一致

實例演示一個trait與接口,抽象類聯(lián)合編程

代碼部分

  1. <?php
  2. //1.先建立一個接口
  3. //先判斷當天腳本中有沒有要建立的接口名稱,如果沒有再建立
  4. if (!interface_exists('iUser')){
  5. interface iUser
  6. {
  7. public function user();
  8. }
  9. }
  10. //2.再建立一個抽象類
  11. if (!class_exists('user1')){
  12. abstract class user1
  13. {
  14. abstract protected function name();
  15. }
  16. }
  17. //3.再建立一個trait,并且在trait中實現(xiàn)以上接口和抽象類中的方法
  18. if (!trait_exists('user2')){
  19. trait user2
  20. {
  21. public function user()
  22. {
  23. return '我的名字是';
  24. }
  25. public function name()
  26. {
  27. return '程東旭';
  28. }
  29. }
  30. }
  31. //4.在建立一個實現(xiàn)類,并且use以上trait
  32. if (!class_exists('user3')){
  33. class user3
  34. {
  35. use user2;
  36. }
  37. }
  38. $user = new user3();
  39. echo $user->user() . $user->name();

總結(jié)

抽象類、接口和普通類混合使用可以簡潔工作類中的代碼,代碼看起來更加優(yōu)雅

批改老師:天蓬老師天蓬老師

批改狀態(tài):合格

老師批語:trait可以將類中方法,進行更好的歸類與整理, 對用戶提供一個更加簡潔的接口
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
關(guān)于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學習!
    全站2000+教程免費學