从零开始学习PHP(五):面向对象

本是古典 何须时尚 2023-05-29 13:09 141阅读 0赞

文章目录

    • 什么是面向对象?
    • 实现面向对象
      • 继承
      • 封装
      • 多态
    • 其他内容

一谈到面向对象,就会出现面向对象的三大特征,封装、继承和多态。那么面向对象和面向过程有什么区别,有什么优势。

什么是面向对象?

面向对象是一种编程思想也叫OOP,个人理解是把一个事务进行抽象化,不再具体去讨论这个事务的执行过程。而是将事务的各个功能逻辑进行抽象化,进行总结归类。
举个面向过程和面向对象的例子:开发一个五指棋程序
在面向过程中:黑棋-》绘制棋盘-》白旗-》绘制棋盘
面向对象中:下棋-》绘制棋盘

在面向过程中,是将一个事务的过程完整的从头到尾的呈现出来,在面向对象中是将问题进行抽象成一类。如:黑棋和白旗走法是一样的,抽象出来。棋盘的绘制也是一样的抽象出来,相互集合起来就完成一个业务流程。

实现面向对象

php中是通过类来实现面向对象的!
一个类包含成员属性和成员方法(函数)例如:

  1. <?php
  2. class Person{
  3. public $stu1 = '小明';//成员属性(变量)
  4. public $stu2 = '小红';
  5. public function eat(){
  6. echo $this->stu1."在吃饭<br>";
  7. }
  8. public function sleep(){
  9. echo $this->stu2."在睡觉";
  10. }
  11. }
  12. $obj = new Person();
  13. $obj->eat();
  14. $obj->sleep();

在这里插入图片描述

上面我们抽象出一个person类,即人对象,小明,小红都是人,人都可以睡觉和吃东西。这就是将一个事务的相同特征抽象出来归纳成为一个类,在实际开发中会将一个模块归纳成一个类,在类中进行业务操作。

继承

我们新建两个类 Man和Woman来继承Person类,继承使用extends关键字

  1. <?php
  2. class Person{
  3. public $stu1 = '小明';//成员属性(变量)
  4. public $stu2 = '小红';
  5. public function eat(){
  6. echo $this->stu1."在吃饭<br>";
  7. }
  8. public function sleep(){
  9. echo $this->stu2."在睡觉<br>";
  10. }
  11. }
  12. class Man extends Person
  13. {
  14. public function sleep(){
  15. echo $this->stu1."在睡觉<br>";
  16. }
  17. }
  18. class Woman extends Person
  19. {
  20. public function play(){
  21. echo $this->stu2."在跳皮筋<br>";
  22. }
  23. }
  24. $man = new Man();
  25. echo $man->stu1."<br>";
  26. $man->eat();
  27. $man->sleep();
  28. $woman = new Woman();
  29. echo $woman->stu2."<br>";
  30. $woman->sleep();
  31. $woman->play();

在这里插入图片描述
在结果中我们看到,子类已经继承了父类的方法和成员变量,在Man类中重写了sleep方法,在woman类中新增了play方法。

封装

在上面的例子中我们就可以看到封装的例子,子类继承了父类的方法,通过子类去调用父类的方法,子类中没有父类方法,我们不知道方法的逻辑,只是调用,这就相当于封装。
封装的作用还有许多,php内置的函数就相当于封装,我们使用这些内置函数,不清楚怎么实现功能的逻辑,直接调用就可以了。还有许多封装的类和接口,提供外部使用,也提高了安全性。

多态

多态是描述一种事务在不同的条件下,展示出不同的状态:如公司的职员有不同的职位正在做不同的事情,获取不同职位在做什么,那么这就是多态例如:

  1. <?php
  2. class employee{ //定义员工父类
  3. protected function working(){ //定义员工工作,需要在子类的实现
  4. echo "本方法需要在子类中重载!";
  5. }
  6. }
  7. class painter extends employee{ //定义油漆工类
  8. public function working(){ //实现继承的工作方法
  9. echo "油漆工正在刷漆!\n";
  10. }
  11. }
  12. class typist extends employee{ //定义打字员类
  13. public function working(){
  14. echo "打字员正在打字!\n";
  15. }
  16. }
  17. class manager extends employee{ //定义经理类
  18. public function working(){
  19. echo "经理正在开会!";
  20. }
  21. }
  22. function printworking($obj){ //定义处理方法
  23. if($obj instanceof employee){ //若是员工对象,则显示其工作状态
  24. $obj->working();
  25. }else{ //否则显示错误信息
  26. echo "Error: 对象错误!";
  27. }
  28. }
  29. printworking(new painter());//显示油漆工的工作
  30. printworking(new typist());//显示打字员的工作
  31. printworking(new manager());//显示经理的工作

在这里插入图片描述

执行一个工作,我们实例不同的身份那么就会执行不同的行为,就实现了多态!

其他内容

在类中还有其他比较重要的内容:

1.修饰符 如public private protected的作用
2.抽象类,接口类,抽象方法,作用和区别
3.设计模式

以上就不展开写了,想要了解可以自行去搜索

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读