欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-01-15 10:58:07
...

类的声明与类的实例化:

类声明的样式代码:

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

效果预览:

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

类的静态成员与扩展:

样式代码:

  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功能、与父类的区别联系

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

效果预览:

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