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 '';
  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. ?>

更多相关文章

  1. 接口和抽象类的实现-区别与联系
  2. PHP类声明|类的实例化|类的静态成员|类的扩展|trait与父类关联|t
  3. PHP面向对象编程
  4. 0202-类声明及类的实例化,静态成员与类的扩展,trait与父类的区别
  5. 类声明-实例化-成员-继承-trait特征类
  6. Java基础知识点1
  7. 全面演示: 函数的作用域与闭包,回调的使用场景以及函数的多值返
  8. [计算机视觉论文速递] 2018-03-14
  9. [计算机视觉论文速递] 2018-03-16

随机推荐

  1. Android的各种onTouch
  2. Android Style.xml 详解
  3. android 安装apk包 卸载 包
  4. Android 使用CoordinatorLayout+AppBarLa
  5. [Android] Fastest Way to Get on Track
  6. android studio SDK版本的调节
  7. android中ScrollView中TextView无法铺满
  8. "equals"和"=="的区别
  9. android 复制信息内容到剪切板 (2011-12-
  10. Android存储访问目录