Blogger Information
Blog 33
fans 0
comment 0
visits 27747
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
服务端 - PHP - OOP之类成员定义与访问、类继承和抽象类实现
Original
724 people have browsed it

服务端 - PHP - OOP之类成员定义与访问、类继承和抽象类实现

一、类成员

1. 类属性

  • 语法:访问限制符 变量;
  • 描述:带有访问控制的变量
  • 分类:常规属性、静态属性和抽象属性
  • 常规属性:被类实例访问
  • 静态属性:被类访问
  • 抽象属性:没有被赋值,无法实例化,默认值是null,只能通过子类继承实现
  1. echo '<h3>一、常规属性的定义和访问</h3>';
  2. class Person {
  3. //在类内部定义类的常规属性
  4. public $name = '小明';
  5. public static $age = 18;
  6. public function getName() {
  7. //在类内部访问类的常规属性
  8. return $this->name;
  9. }
  10. }
  11. $p1 = new Person();
  12. //在类外部访问类的常规属性
  13. echo $p1->name;
  14. echo '<br>';
  15. //在类内部访问类的常规属性
  16. echo $p1->getName();
  17. echo '<h3>二、静态属性的定义和访问</h3>';
  18. class Person1 {
  19. public $name = '小红';
  20. //在类内部定义类的静态属性
  21. public static $age = 17;
  22. public function getAge() {
  23. //在类内部访问类的静态属性
  24. return self::$age;
  25. }
  26. }
  27. $p2 = new Person1();
  28. //在类外部访问类的静态属性
  29. echo $p2::$age;
  30. echo '<br>';
  31. //在类内部访问类的静态属性
  32. echo $p2->getAge();

2. 类方法

  • 语法:访问限制符 函数;
  • 描述:带有访问控制的函数
  • 分类:常规方法、静态方法和抽象方法
  • 常规属性:public/protected/private
  • 静态属性:static。直接用类调用,被所有类实例所共享
  • 抽象属性:没有方法体
  1. echo '<h3>一、常规方法的定义和访问</h3>';
  2. class Person {
  3. public $name = '小明';
  4. public static $age = 18;
  5. //在类内部定义类的常规方法
  6. public function getName() {
  7. return $this->name;
  8. }
  9. public function sayName() {
  10. //在类内部调用类的常规方法
  11. echo $this->getName();
  12. }
  13. }
  14. $p1 = new Person();
  15. //在类外部调用类的常规方法
  16. echo $p1->sayname();
  17. echo '<br>';
  18. echo '<h3>二、静态方法的定义和访问</h3>';
  19. class Person1 {
  20. public $name = '小红';
  21. public static $age = 17;
  22. //在类内部定义类的静态方法
  23. public static function getAge() {
  24. return self::$age;
  25. }
  26. public static function sayAge() {
  27. //在类内部调用类的静态方法
  28. echo self::getAge();
  29. }
  30. }
  31. $p2 = new Person1();
  32. //在类外部调用类的静态方法
  33. echo $p2::sayAge();
  34. echo '<br>';
  35. echo '<h3>三、在类方法中访问外部成员</h3>';
  36. $name = '小王';
  37. $age = 19;
  38. $sayName = function() {
  39. global $name;
  40. return '我的名字叫'.$name;
  41. };
  42. class Person2 {
  43. public function hello($v, $a) {
  44. return $v(). ','.'我的年龄是'.$a;
  45. }
  46. }
  47. $p3 = new Person2;
  48. echo $p3->hello($sayName, $age);

3. 类常量

  • 语法:const 常量名;
  • 描述:在类中始终保持不变的值

二、类继承

  • 语法:class 类名 extends 基类名;
  • 二类成员:子类有权访问的父类成员类型,public和protected
  • 三种操作:子类对父类的三种操作,继承、重写和扩展
  • 继承:父类的二类成员自动成为子类的成员
  • 重写:覆写与父类/基类同名的成员(属性,方法)
  • 扩展:子类添加自身的方法来增加/扩展父类的功能
  1. /*
  2. * 时间:2020年4月30日10:42:47
  3. * 知识点:重写类属性和类方法
  4. * 场景:重写父类的方法并对其进行拓展
  5. */
  6. echo '<h3>类的继承</h3>';
  7. class Person {
  8. //定义公共的类属性
  9. public $name;
  10. public $sex;
  11. public $age;
  12. public $test = 1;
  13. //使用一个公共方法初始化类属性
  14. public function setInfo($name, $sex, $age)
  15. {
  16. $this->name = $name;
  17. $this->sex = $sex;
  18. $this->age = $age;
  19. }
  20. //定义一个公共方法来获取类属性
  21. public function getSelf() {
  22. return $this->name.$this->sex.$this->age;
  23. }
  24. }
  25. $p1 = new Person;
  26. $p1->setInfo('小明', '男', 18);
  27. echo $p1->test;
  28. echo $p1->getSelf();
  29. echo '<br>';
  30. //定义一个子类
  31. class Student extends Person {
  32. //重写父类的属性
  33. public $test = 2;
  34. public $school = '北京三中';
  35. //重写父类的saySelf方法
  36. //并在该方法中使用parent关键字调用父类被覆盖的saySelf方法
  37. //如果需要父类saySelf方法中的完整代码而又要避免在该方法中对其复制粘贴,因为这样会导致代码冗余
  38. public function getSelf() {
  39. return parent::getSelf().$this->school;
  40. }
  41. //扩展父类的方法
  42. public function saySchool() {
  43. echo '我在'.$this->school.'读书';
  44. }
  45. }
  46. $p2 = new Student;
  47. $p2->setInfo('小红', '女', 17);
  48. echo $p2->test;
  49. echo $p2->getSelf();
  50. echo '<br>';
  51. $p2->saySchool();

三、抽象类

  • 语法:abstract class 类名;
  • 特点:
序号 描述
1 抽象类也叫设计类
2 不能被实例化
3 只要类中有一个抽象方法,那么这个类就是抽象类
4 抽象类中允许有抽象成员,但不是强制的,也可以没有,类中也可以定义普通方法
5 必须实现类中的抽象方法才可以实现此抽象类
6 抽象类可以被继承
  • 作用:实现部分分离“设计(抽象类中完成)与实现(工作类中完成)”
  • 场景:接口实现
  • 抽象方法:没有方法体,不能定义其具体的功能实现
  • 抽象方法定义:abstract 访问控制 函数名;
  • 抽象类的继承:继承一个抽象类的时候,子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类中一样(或者更为宽松)
  1. echo '<h3>抽象类的实现</h3>';
  2. //设计类实现
  3. abstract class aPerson {
  4. protected static $name;
  5. protected static $sex;
  6. protected static $age;
  7. abstract protected function getInfo();
  8. }
  9. //工作类实现
  10. class Student extends aPerson {
  11. protected $school;
  12. public function setInfo($name, $sex, $age, $school) {
  13. self::$name = $name;
  14. self::$sex = $sex;
  15. self::$age = $age;
  16. $this->school = $school;
  17. }
  18. public function getInfo() {
  19. return self::$name.self::$sex.self::$age.$this->school;
  20. }
  21. }
  22. //客户端调用
  23. $user = new Student;
  24. $user->setInfo('小明', '男', 18, '北京三中');
  25. echo $user->getInfo();

四、课程总结

  • 今天学习了 PHP 的面向对象编程,通过上课认真听讲和认真完成老师布置的作业,使得我对 PHP 面向对象编程的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了类成员的定义和访问,单继承、以及抽象类的特点和基本用法。
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:面向对象中有许多新知识 , 如果自学难度不小
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post