Blogger Information
Blog 38
fans 1
comment 0
visits 28742
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
12月03日_类与对象(OOP编程基本流程、 类与实例的引用、构造方法、类成员的访问控制、继承接口抽象)
fkkf467
Original
656 people have browsed it

1. OOP的基本步骤

  1. <?php
  2. // 面向对象(OOP)基本步骤
  3. // 1. 创建类
  4. class Demo1{
  5. // 2. 添加类成员
  6. // 创建属性
  7. public $name = '猪小明';
  8. // 创建方法
  9. public function getName(){
  10. // 第一步:类的实例化
  11. $obj = new Demo1;
  12. // 第二步:返回类属性
  13. return '我的名字是:' . $obj->name;
  14. }
  15. }
  16. // 3. 访问类成员
  17. $obj = new Demo1;
  18. echo $obj->name . '<br>';
  19. echo $obj->getName();

2. 类与实例的引用

  1. <?php
  2. // 1. 创建类
  3. class Demo2{
  4. // 2. 添加类成员
  5. public $name = '猪小明';
  6. public $age = 18;
  7. public function getName(){
  8. return '我的名字是:' . $this->name;
  9. }
  10. public function getAge(){
  11. return '我的年龄是:' . $this->age . '岁';
  12. }
  13. }
  14. // 3. 访问类成员
  15. $obj = new Demo2();
  16. echo $obj->getName() . '<br>';
  17. echo $obj->getAge() . '<br>';

3. 构造方法

  1. <?php
  2. // 1. 创建类
  3. class Demo3{
  4. // 2. 添加类成员
  5. public $name;
  6. public $age;
  7. // 构造方法
  8. // 1. 类实例的初始化
  9. // 2. 自动完成在类实例创建过程中的操作
  10. public function __construct($name,$age){
  11. $this->name = $name;
  12. $this->age = $age;
  13. // 在类实例化时自动会被执行
  14. echo $this->getInfo();
  15. }
  16. public function getInfo(){
  17. return '我的名字叫:' . $this->name . ',我今年' . $this->age . '岁';
  18. }
  19. }
  20. // 3. 访问类成员
  21. new Demo3('猪小明', 18);

4. 类成员的访问控制以及属性重载

  1. <?php
  2. // 1. 创建类
  3. class Demo4{
  4. // 2. 添加类成员
  5. public $name;
  6. // 如果不想让该属性在类的外部被访问,可以将该属性的访问控制符修改为:
  7. // private 私有成员,protected 受保护成员
  8. protected $age;
  9. private $job;
  10. public function __construct($name,$age,$job){
  11. $this->name = $name;
  12. $this->age = $age;
  13. $this->job = $job;
  14. }
  15. public function getInfo(){
  16. return '我的名字叫:' . $this->name . ',我今年' . $this->age . ',我的工作是:' . $this->job;
  17. }
  18. // 属性重载, 通过魔术方法 __get($name), __set($name,$value), __isset($name), __unset($name)
  19. public function __get($name){
  20. $username = $_GET['username'] ?? '';
  21. if (isset($username) && $username === 'admin'){
  22. return $this->$name ?? '属性未定义';
  23. }
  24. return '无权访问';
  25. }
  26. public function __set($name, $value){
  27. $username = $_GET['username'] ?? '';
  28. if (isset($username) && $username === 'admin'){
  29. echo isset($this->$name) ? $this->$name=$value : '属性不存在';
  30. }else{
  31. echo '无权修改';
  32. }
  33. }
  34. public function __isset($name){
  35. $username = $_GET['username'] ?? '';
  36. if (isset($username) && $username === 'admin'){
  37. echo isset($this->$name) ? '存在该属性' : '没有改属性';
  38. }else{
  39. echo '无权检测';
  40. }
  41. }
  42. public function __unset($name){
  43. $username = $_GET['username'] ?? '';
  44. if (isset($username) && $username === 'admin'){
  45. unset($this->$name);
  46. echo '删除成功';
  47. }else{
  48. echo '无权删除';
  49. }
  50. }
  51. }
  52. // 3. 访问类成员
  53. $obj = new Demo4('猪小明',18,'程序员');
  54. echo $obj->age . '<br>';
  55. $obj->job = '老师';
  56. echo '<br>';
  57. isset($obj->sex);
  58. echo '<br>';
  59. unset($obj->age);

5. 类的继承

  1. <?php
  2. // 类的继承
  3. // 1. 创建类
  4. class Demo5{
  5. // 2. 添加类成员
  6. public $name;
  7. protected $age;
  8. private $job;
  9. public function __construct($name,$age,$job){
  10. $this->name = $name;
  11. $this->age = $age;
  12. $this->job = $job;
  13. }
  14. public function getInfo(){
  15. return '我的名字叫:' . $this->name . ',我今年' . $this->age . ',我的工作是:' . $this->job;
  16. }
  17. }
  18. class Demo5_1 extends Demo5{
  19. private $salary;
  20. public function __construct($name, $age, $job,$salary){
  21. // parent:: 调用 父类中的成员
  22. parent::__construct($name, $age, $job);
  23. $this->salary = $salary;
  24. }
  25. // 重写父类中的方法
  26. public function getInfo(){
  27. return parent::getInfo() . ',我的工资是:' . $this->salary;
  28. }
  29. }
  30. // 3. 访问类成员
  31. $obj = new Demo5_1('猪小明',18,'程序员',12000);
  32. echo $obj->getInfo();

6. trait技术

  1. <?php
  2. // trait: 代码复用方式,用来扩展当前类的功能
  3. // trait: 当成一个公共方法库
  4. // trait使用了类的定义的语法,但不是类,所以不能实例化
  5. trait Test{
  6. public function getInfo(){
  7. return '我的名字叫:' . $this->name . ',我今年' . $this->age . ',我的工作是:' . $this->job;
  8. }
  9. }
  10. // 1. 创建类
  11. class Demo6{
  12. // 导入trait类库
  13. use Test;
  14. // 2. 添加类成员
  15. public $name;
  16. protected $age;
  17. private $job;
  18. public function __construct($name,$age,$job){
  19. $this->name = $name;
  20. $this->age = $age;
  21. $this->job = $job;
  22. }
  23. }
  24. class Demo6_1 extends Demo6{
  25. private $salary;
  26. public function __construct($name, $age, $job,$salary){
  27. // parent:: 调用 父类中的成员
  28. parent::__construct($name, $age, $job);
  29. $this->salary = $salary;
  30. }
  31. // 重写父类中的方法
  32. /*public function getInfo(){
  33. return parent::getInfo() . ',我的工资是:' . $this->salary;
  34. }*/
  35. }
  36. // 优先级:当前类中的同名方法 > trait类中的同名方法 > 父类中的同名方法
  37. // 3. 访问类成员
  38. $obj = new Demo6('猪小明',18,'Java工程师');
  39. echo $obj->getInfo() . '<br>';
  40. $obj1 = new Demo6_1('张三',24,'PHP工程师',12000);
  41. echo $obj1->getInfo();

7. 接口interface

  1. <?php
  2. // 接口
  3. interface iDemo{
  4. public function getInfo();
  5. public function getJob();
  6. }
  7. // 1. 创建类
  8. class Demo7 implements iDemo{
  9. // 2. 添加类成员
  10. public $name;
  11. protected $age;
  12. private $job;
  13. public function __construct($name,$age,$job){
  14. $this->name = $name;
  15. $this->age = $age;
  16. $this->job = $job;
  17. }
  18. public function getInfo(){
  19. return '我的名字叫:' . $this->name . ',我今年' . $this->age . ',我的工作是:' . $this->job;
  20. }
  21. public function getJob(){
  22. return '我是一名优秀的' . $this->job;
  23. }
  24. }
  25. // 3. 访问类成员
  26. $obj = new Demo7('猪小明',18,'php程序员');
  27. echo $obj->getInfo() . '<br>';
  28. echo $obj->getJob() . '<br>';

8. 抽象类abstract

  1. <?php
  2. // 抽象类:包含抽象方法
  3. // 接口全是抽象方法
  4. // 抽象类中可以有普通方法
  5. abstract class Demo{
  6. abstract public function getInfo();
  7. public function getSalary($salary){
  8. return '我的工资是:' . $salary;
  9. }
  10. }
  11. // 1.创建类
  12. class Demo8 extends Demo{
  13. // 2. 添加类成员
  14. public $name;
  15. protected $age;
  16. private $job;
  17. public function __construct($name,$age,$job){
  18. $this->name = $name;
  19. $this->age = $age;
  20. $this->job = $job;
  21. }
  22. public function getInfo(){
  23. return '我的名字叫:' . $this->name . ',我今年' . $this->age . '岁,我的工作是:' . $this->job;
  24. }
  25. }
  26. // 3. 访问类成员
  27. $obj = new Demo8('猪小明',22,'程序员');
  28. echo $obj->getInfo() . '<br>';
  29. echo $obj->getSalary(20000);


9. 总结

通过以上实例的练习,对类与对象有了更深刻的认识和理解。

(重点)OOP编程基本流程:
  • 创建类
  • 添加类成员
  • 访问类成员
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