博主信息
博文 47
粉丝 3
评论 0
访问量 50696
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
类声明与实例化、类的静态成员与类的扩展、trait与父类区别联系、trait冲突与优先级解决方案
原创
1042人浏览过

1.类声明与实例化

  1. <?php
  2. // class声明一个类
  3. class User
  4. {
  5. // 受保护的属性:可以在当前类与扩展类使用
  6. protected $name;
  7. protected $email;
  8. // 构造方法
  9. public function __construct($name,$email)
  10. {
  11. $this->name = $name;
  12. $this->email = $email;
  13. }
  14. // 公开方法
  15. public function show()
  16. {
  17. return "$this->name : $this->email";
  18. }
  19. }
  20. // new实例化
  21. $obj = new User('张三','guest@qq.com');
  22. echo $obj->show(),'<br>';
  23. ?>

2.类的静态成员与类的扩展

  1. <?php
  2. // 类的静态成员
  3. class Shop
  4. {
  5. // 静态属性
  6. protected static $name;
  7. private static $price;
  8. // 构造方法
  9. public function __construct($name,$price)
  10. {
  11. self::$name = $name;
  12. self::$price = $price;
  13. }
  14. // 静态方法
  15. public static function show()
  16. {
  17. return sprintf('商品名:%s<br>价格:%d',self::$name,self::$price);
  18. }
  19. }
  20. $shop = new Shop('电脑',9999);
  21. echo Shop::show(),'<br>';
  22. echo '<hr>';
  23. // 子类的扩展
  24. class Order extends Shop
  25. {
  26. // 属性扩展
  27. private static $orderid;
  28. // 重写父类构造器
  29. public function __construct($name,$price,$orderid)
  30. {
  31. parent::__construct($name,$price);
  32. self::$orderid = $orderid;
  33. }
  34. // 重写父类普通方法
  35. public static function show():string
  36. {
  37. return parent::show() . "<br>订单号:". self::$orderid;
  38. }
  39. }
  40. $orderid = new Order('小米',3989,123456789);
  41. echo Order::show(),'<br>';
  42. ?>

3.trait功能与trait父类的区别与联系、并实例演示trait冲突与优先级解决方案

trait特征:理解为一个公共方法集、借用class语法实现、但不是类,所以不能实例化
父类可以实例化
trait特征:类使用use关键字、实现代码复用特征类中的方法。
父类:父类使用extends扩展父类,实现代码复用父类中的方法。
类同时扩展父类,又使用trait特征类,同名方法优先级:类自身中的方法 > trait > 扩展的父类

  1. <?php
  2. trait Shop
  3. {
  4. public function s1()
  5. {
  6. return 'Hello,World!';
  7. }
  8. }
  9. // trait的类,使用use关键字引用
  10. class A
  11. {
  12. use Shop;
  13. }
  14. echo (new A)->s1(),'<br>';
  15. echo '<hr>';
  16. // trait的冲突与优先级的解决方案
  17. trait A1
  18. {
  19. public function order()
  20. {
  21. return 'PHP中文网';
  22. }
  23. }
  24. trait A2
  25. {
  26. public function order()
  27. {
  28. return ' : php.cn';
  29. }
  30. }
  31. class B
  32. {
  33. use A1,A2{
  34. // 1.优先级
  35. A1::order insteadOf A2;
  36. // 2.别名
  37. A2::order as orders;
  38. }
  39. }
  40. echo (new B)->order(),(new B)->orders(),'<hr>';
  41. ?>
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学