博客列表 >演示类的声明、实例化、静态成员扩展等,以及trait功能、与父类的区别联系

演示类的声明、实例化、静态成员扩展等,以及trait功能、与父类的区别联系

lus菜
lus菜原创
2021年02月08日 00:40:29735浏览

类的声明与类的实例化:

类声明的样式代码:

  1. <?php
  2. // 声明一个类文件: 声明的类与这个类所在的文件推荐同名
  3. // 类: 对象的模板
  4. class Dsij
  5. {
  6. //protected: 受保护成员,仅限本类以及子类访问
  7. protected $name;
  8. protected $digit;
  9. // 类实例化的时候会调用它, 构造方法
  10. public function __construct($name,$digit)
  11. {
  12. //$this: 当前类实例的引用
  13. $this->name = $name;
  14. $this->digit = $digit;
  15. }
  16. // 实例方法
  17. public function show():string
  18. {
  19. return "$this->name : $this->digit 元";
  20. }
  21. }

类的实例化样式代码:

  1. <?php
  2. // 类必须实例之后才可以访问内部的实例成员
  3. // 加载类文件
  4. require 'zuoye.php';
  5. // new : 类实例化
  6. $lslh = new Dsij('小米电视', 7899);
  7. echo $lslh->show(),'<br>';

效果预览:

类的静态成员与扩展:

样式代码:

  1. // 类的静态成员
  2. class Ldjtdy
  3. {
  4. // 静态属性
  5. protected static $name;
  6. private static $price;
  7. // 构造方法
  8. public function __construct($name, $price)
  9. {
  10. // 静态成员与实例无关,当然不能用$this访问,用类的引用
  11. // self: 当前类的引用
  12. self::$name = $name;
  13. self::$price = $price;
  14. }
  15. // 静态方法
  16. public static function show()
  17. {
  18. // 静态方法中不能用$this
  19. return sprintf('商品信息: %s<br> 商品价格: %d', self::$name, self::$price);
  20. }
  21. }
  22. $Ldjtdy = new Ldjtdy('电脑', 12345);
  23. echo Ldjtdy::show(), '<hr>';
  24. // 子类, 类的复用 extends: 扩展
  25. class zlfy extends Ldjtdy
  26. {
  27. // 属性扩展
  28. private static $orcdf;
  29. // 重写父类构造器
  30. public function __construct($name, $price, $orcdf)
  31. {
  32. parent::__construct($name, $price);
  33. self::$orcdf = $orcdf;
  34. }
  35. // 重写父类普通方法
  36. public static function show(): string
  37. {
  38. return parent::show() . "<br>数量:" . self::$orcdf;
  39. }
  40. }
  41. $orcdf = new zlfy('小米电视', 12998, 123);
  42. echo zlfy::show(), '<hr>';

效果预览:

trait功能以及父类的区别联系:

  1. trait: 理解为一个公共方法集; trait 借用了class语法实现的一个轻量级的"类",但不是类,所以不能"实例化"
  2. 在要使用trait的类中,使用use关键字引用它即可,当一个类引入多个trait时,很容易发生trait成员的命名冲突
  3. trait中存在与父类同名的成员时,trait优先,own > trait > parent

样式代码:

  1. <?php
  2. trait Jtxq
  3. {
  4. public function h1()
  5. {
  6. return 'Hello 你好呀';
  7. }
  8. }
  9. // 在要使用trait的类中,使用use关键字引用它即可
  10. class A
  11. {
  12. use Jtxq;
  13. }
  14. echo (new A)->h1(),'<hr>';
  15. // trait的冲突与优先级的解决方案
  16. trait A01
  17. {
  18. public function asxm()
  19. {
  20. return '不早了该写作业了!';
  21. }
  22. }
  23. trait A02
  24. {
  25. public function asxm()
  26. {
  27. return ' 请打开网站 : php.cn';
  28. }
  29. }
  30. class G
  31. {
  32. use A01,A02{
  33. // 1.优先级
  34. A01::asxm insteadOf A02;
  35. // 2.别名
  36. A02::asxm as qasxhm;
  37. }
  38. }
  39. echo (new G)->asxm(),(new G)->qasxhm(),'<hr>';

效果预览:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议