类的声明与类的实例化:

类声明的样式代码:

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

效果预览:

更多相关文章

  1. PHP接口与抽象类实例
  2. PHP的接口和抽象类
  3. php学习笔记(类声明,类的实例化,类的静态成员与类的扩展)
  4. nginx牛逼tomcat弱鸡探索之道
  5. 接口和抽象类
  6. 类声明与实例化、类的静态成员与类的扩展、trait与父类区别联系
  7. 0202面向对象编程基础
  8. PHP类声明|类的实例化|类的静态成员|类的扩展|trait与父类关联|t
  9. PHP面向对象编程

随机推荐

  1. Java 类路径(学习 Java 编程语言 036)
  2. 图解 LeetCode 第 421 题:数组中两个数的
  3. 老司机开车,教会女朋友什么是「马拉车算法
  4. 五分钟学算法之经典算法题 :排序算法(某东
  5. 字典树概念与题型解析
  6. 程序员的快乐往往就是这么朴素无华且枯燥
  7. 架构 | 到底该不该使用JavaScript框架
  8. 2017年 Web 开发趋势
  9. 超详细!详解一道高频算法题:数组中的第 K
  10. 软件设计原则