博客列表 >PHP- 方法与继承、抽象类与接口的基本语法

PHP- 方法与继承、抽象类与接口的基本语法

晴天
晴天原创
2020年04月29日 16:36:17651浏览

关于访问类中属性

  1. <?php
  2. class User
  3. {
  4. public $name = 'maichael';
  5. public $age = 30;
  6. // 访问类中属性
  7. // 方法1.
  8. public function class1(){
  9. // 创建类实例
  10. $class1 = new user;
  11. return '姓名:'.$class1->name.'年龄:'.$class1->age;
  12. }
  13. // 方法2.
  14. public function class2(){
  15. // $this始终与当前类绑定,为PHP系统进行维护和赋值
  16. return "姓名:{$this->name} 年龄:{$this->age}";
  17. }
  18. // 类种方法变量与类属性区别
  19. // 简单说 该变量需要在多个方法中使用时,创建为类属性
  20. // 该变量仅在当前方法中使用时,创建为类中方法变量
  21. public function class3(){
  22. $city = '成都';
  23. return "姓名:{$this->name} 年龄:{$this->age} 城市:{$city}";
  24. }
  25. // 类方法访问外部成员 函数直接访问 变量用global访问
  26. public function class4(){
  27. $func = func();
  28. global $a;
  29. return func() . $a;
  30. }
  31. // 改进类中方法
  32. public function class5(string $a , Closure $closure){
  33. return $closure().$a;
  34. }
  35. // 静态方法直接用类调用被所有示例所共享
  36. static public $nationality = '加拿大';
  37. static public function class6(){
  38. return '国籍是'. self::$nationality;
  39. }
  40. }
  41. $user = new User;
  42. // 方法1
  43. echo $user->class1();
  44. // 输出姓名:maichael年龄:30
  45. // 方法2
  46. echo $user->class2();
  47. // 输出姓名:maichael年龄:30
  48. echo '<hr>';
  49. // 类中变量
  50. echo $user->class3();
  51. // 输出 姓名:maichael 年龄:30 城市:成都
  52. // 类种方法访问外部成员
  53. function func(){
  54. return 'PHP';
  55. }
  56. $a = '中文网';
  57. echo $user->class4();
  58. // 输出PHP中文网
  59. // 改进类中方法
  60. $func = function (){
  61. return 'PHP';
  62. };
  63. echo $user->class5($a,$func);
  64. // 静态方法
  65. echo $user->class6();
  66. // 输出国籍是加拿大

类的成员访问控制

  1. // 类的成员访问控制:作用域
  2. // public: 公开成员,默认值,类外部类内部以及类的子类中均可使用
  3. // protected :受保护成员,禁止类外部使用,类内部及子类可使用
  4. // private : 私有成员,仅在当前类中可使用,类外部及子类均禁止使用
  5. // 类的上下文环境:当前类以及他的扩展类/子类,构成的一个具有层级结构的类家庭
  6. class User
  7. {
  8. public $name = 'michael';
  9. protected $age = 30;
  10. private $gender = '男';
  11. // 当前类访问私有成员
  12. public function func()
  13. {
  14. return "性别:{$this->gender}";
  15. }
  16. }
  17. // 访问一下
  18. $user = new User;
  19. echo $user->name;
  20. // echo $user->age; 报错无法访问受保护的
  21. // echo $user->gender; 报错 无法访问私有的
  22. echo $user->func(); //输出性别:男
  23. // 创建子类
  24. class Ser extends User
  25. {
  26. // 创建一个方法访问父类中的受保护成员
  27. public function class()
  28. {
  29. return "年龄:{$this->age}";
  30. }
  31. // 子类访问父类私有成员
  32. public function class1()
  33. {
  34. return "性别:{$this->gender}";
  35. }
  36. }
  37. $ser = new Ser;
  38. echo $ser->class();
  39. // 输出年龄:3
  40. // 输出父类私有成员
  41. // echo $ser->class1(); 报错:未定义的属性

类的继承

  1. // 面向对象 OOP:封装,继承,多态
  2. // 封装 public protected private
  3. // 继承 extends
  4. // 多态 方法的重写是实现方法级的多态,面向接口开发是实现对象级的多态
  5. // 类的继承
  6. // 二类成员:父类的public protected
  7. // 三种操作:继承,重写,扩展
  8. // 继承:父类的二类成员自动成为子类的成员
  9. // 重写:覆盖与父类同名的成员(属性、方法)
  10. // 扩展:子类添加自身的方法来扩展父类的功能
  11. // 父类也叫基类,子类也叫扩展类
  12. // 创建父类
  13. class User
  14. {
  15. public $name = 'michael';
  16. protected $age = 30;
  17. private $gender = '男';
  18. public static $nationality = '加拿大';
  19. // 创建方法
  20. public function Name()
  21. {
  22. return $this->name;
  23. }
  24. }
  25. // 创建子类
  26. class Ser extends User
  27. {
  28. // 重写父类属性
  29. public $name = "kaiwen";
  30. // 重写方法
  31. public function Name(){
  32. return parent::Name().'不是中国人';
  33. }
  34. // 扩展属性
  35. public $hibby = 'shoot';
  36. // 扩展方法
  37. public function means(){
  38. return parent::Name()."爱好:{$this->hibby}";
  39. }
  40. }
  41. // 子类实例化
  42. $ser = new Ser;
  43. // 直接继承父类方法,在子类输出
  44. echo $ser->Name(); //输出 michael
  45. // 重写父类name属性,输出
  46. echo $ser->Name(); //输出 kaiwen不是中国人 因为上面已经重写了name的值 所以不是michael
  47. echo '<hr>';
  48. // 扩展
  49. echo $ser->means(); //输出kaiwen爱好:shoot
  50. // 最终方法最终类 在前面加 final

抽象类

  1. // 抽象类:部分分离了设计(抽象类的完成)与实现(工作类的完成)
  2. // 只要一个类中有一个抽象方法 那么这个类就是抽象类
  3. // 抽象方法:没有方法体
  4. // 创建一个抽象类
  5. abstract class User
  6. {
  7. public $name = 'michael';
  8. protected $age = 30;
  9. private $gender = '男';
  10. public static $nationality = '加拿大';
  11. // 创建方法
  12. public function Name()
  13. {
  14. return $this->name;
  15. }
  16. // 创建抽象方法:没有方法体
  17. abstract public function class();
  18. }
  19. // 子类叫做实现类或者工作类 父类中的抽象方法必须在子类中实现
  20. // 实现类、工作类:是一个可以被实例化的普通类
  21. // 工作类不一定是一个可以被实现的普通类,他也可以是一个抽象类
  22. // 抽象类也可以被继承,也可以被用在继承上下文环境中、
  23. // 抽象类中允许有抽象成员,但不是强制的,也可以没有
  24. abstract class Ser extends User
  25. {
  26. // 创建一个受保护的属性
  27. protected $hibby = 'shoot';
  28. // 必须将父类中的抽象方法实现
  29. public function class(){
  30. return "姓名:{$this->name} 兴趣:{$this->hibby}";
  31. }
  32. }
  33. // 最终工作类:允许被实例化
  34. class Er extends Ser
  35. {
  36. public function class(){
  37. return parent::class();
  38. }
  39. }
  40. // 实例化
  41. $er = new Er;
  42. echo $er->class();
  43. // 输出姓名:michael 兴趣:shoot

接口

  1. // 接口:完成分离了“设计与实现”
  2. // 关键字:interface
  3. // 使用与类相似的语法:抽象方法,常量,构造方法(魔术方法的一种)
  4. // 默认访问控制必须是public
  5. // 接口允许多继承,从而实现了PHP的多继承
  6. // 子类继承父类使用 implements
  7. // 创建接口
  8. interface User{
  9. // 接口常量 const
  10. const NAME = 'michael';
  11. // 接口方法
  12. public static function class();
  13. }
  14. // 访问一下接口常量
  15. echo User::NAME;
  16. // 工作类实现接口
  17. class Ser implements User{
  18. protected static $age = 17;
  19. public static function class(){
  20. return '姓名: '.User::NAME. '年龄: '.self::$age;
  21. // 注意 这个地方不能用“” 双引号
  22. }
  23. }
  24. echo Ser::class();
  25. // 输出姓名: michael年龄: 17

总结:

看上去无法理解,当深入的敲上几遍,就慢慢理解了

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