Blogger Information
Blog 47
fans 3
comment 0
visits 38233
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类声明与实例化、类的静态成员与类的扩展、trait与父类区别联系、trait冲突与优先级解决方案
Original
725 people have browsed it

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. ?>
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments