博客列表 >PHP与面向对象编程

PHP与面向对象编程

Jason
Jason原创
2020年05月01日 17:23:56993浏览

php之oop编程

OOP编程简称面向对象编程,面向对象编程有三大特性,封装,继承,多态,利用这三大特性来实现代码的设计与实现,这个编程思维非常的接近人的思维了,就好像在公司里,老板说要做件事情,把每个地方做什么,给设计出来,然后员工实现出来。只不过这是用在编程里面,道理是一样的。如果想学会面向对象编程,就必须了解好,封装,继承,多态,下面通过案例带大家了解一下。

oop继承的三大功能

继承可以想象成,子承父业,继承了父业之后,可以重新改版业务,扩展业务,都行。在编程里也一样,总共分为,继承,重写,扩展

extends继承

简单的继承,就是把父类的中的属性和方法,给复制过来。

实例:

  1. // 父类:基类
  2. class Fruits
  3. {
  4. protected $name = '香蕉';
  5. protected $source = '泰国';
  6. // 方法
  7. public function message()
  8. {
  9. return "名称:{$this->name}"."产地为:{$this->source}";
  10. }
  11. }
  12. // 子类:扩展类
  13. class Banana extends Fruits
  14. {
  15. }
  16. // 客户端
  17. $banana = new Banana();
  18. echo $banana->message();

输出:
名称:香蕉产地为:泰国

通过输出我们可以看到,子类并没有一句代码,仅仅是继承了父类的方法,这就是基本的继承,下面来说一下扩展

重写

重写就是将父类中的属性进行更新,但是这个属性在子类中,并不在父类中。

实例:

  1. // 父类:基类
  2. class Fruits
  3. {
  4. protected $name = '香蕉';
  5. protected $source = '泰国';
  6. // 方法
  7. public function message()
  8. {
  9. return "名称:{$this->name}"."产地为:{$this->source}";
  10. }
  11. }
  12. // 子类:扩展类
  13. class Banana extends Fruits
  14. {
  15. // 属性重写
  16. protected $name = '葡萄';
  17. protected $source = '中国';
  18. protected $weight = '1.9';
  19. // 方法重写
  20. public function message()
  21. {
  22. return "名称:{$this->name}"."产地为:{$this->source}"."重量为:{$this->weight}";
  23. }
  24. }
  25. // 客户端
  26. $banana = new Banana();
  27. echo $banana->message();

输出:

名称:葡萄产地为:中国重量为:1.9

同样的代码,我们只是在子类中,将父类的属性与方法进行了重写,结果就不一样

扩展

扩展顾名思义,就是在父类的基础上,进行扩建,不对原来的属性与方法进行更改

示例:

  1. // 父类:基类
  2. class Fruits
  3. {
  4. protected $name = '香蕉';
  5. protected $source = '泰国';
  6. // 方法
  7. public function message()
  8. {
  9. return "名称:{$this->name}"."产地为:{$this->source}";
  10. }
  11. }
  12. // 子类:扩展类
  13. class Banana extends Fruits
  14. {
  15. protected $name = '葡萄';
  16. protected $source = '中国';
  17. protected $weight = '1.9';
  18. // 属性扩展
  19. protected $color = 'yellow';
  20. public function message()
  21. {
  22. return "名称:{$this->name}"."产地为:{$this->source}"."重量为:{$this->weight}";
  23. }
  24. // 方法扩展
  25. public function appearance()
  26. {
  27. return "颜色:{$this->color}";
  28. }
  29. }
  30. // 客户端
  31. $banana = new Banana();
  32. echo $banana->message();
  33. echo $banana->appearance();

输出
名称:葡萄产地为:中国重量为:1.9颜色:yellow

可以看到,通过扩写把父类中的功能进行了增加。

抽象类的作用与实现

前面我们说过,老板就是告诉员工,这个地方怎么做,那个地方怎么做,并没有执行,都是一些抽象的东西,比如,老板说这个地方要优化一下,你去改一下,这就是一句抽象的话,因为老板并没有告诉你要怎么做,员工知道要优化后,就开始着手敲代码,这就是实现。设计与实现始终是面向对象的核心,不是单纯的敲代码。

abstract抽象类的实现

既然是抽象,就不会有方法的的实现,以及属性的值。

示例:

  1. // 设计类
  2. abstract class Fruits
  3. {
  4. protected $name;
  5. protected $source;
  6. protected $weight;
  7. // 方法
  8. abstract protected function message();
  9. // 抽象的方法是没有方法体的
  10. }
  11. // 实现类
  12. class Banana extends Fruits
  13. {
  14. protected $name = '葡萄';
  15. protected $source = '中国';
  16. protected $weight = '1.9';
  17. protected function message()
  18. {
  19. // 实现抽象类,必须将抽象方法实现
  20. return "名称:{$this->name}"."产地为:{$this->source}"."重量为:{$this->weight}";
  21. }
  22. }
  23. // 最终工作类
  24. class work1 extends Banana
  25. {
  26. public function printf()
  27. {
  28. return parent::message();
  29. }
  30. }
  31. // 客户端
  32. $banana = new work1();
  33. echo $banana->printf();

输出
名称:葡萄产地为:中国重量为:1.9

通过abstract来声明,就可以将一个类变为抽象类,也就是老板说的话,通过实现类来写代码,把老板说的话实现出来,非常巧妙。

接口的基本语法

接口就像两个不同的东西,通过接口结合在一起,这个在后面的实战中可能会用的多,目前只能知道一些基本语法。

示例

  1. interface iUser
  2. {
  3. // 接口常量
  4. const NATION = '俄罗斯';
  5. public static function write();
  6. // 构造方法
  7. }
  8. // 工作类实现接口
  9. class User implements iUser
  10. {
  11. protected static $name = '赵忠祥';
  12. // 接口中的抽象方法,必须在工作类中实现
  13. public static function write()
  14. {
  15. return self::$name.'的国籍是:'.iUser::NATION;
  16. }
  17. }
  18. // 客户端
  19. // 访问接口常量,与访问常量一样。
  20. echo iUser::NATION;
  21. // echo User::write();
  22. $user = new User();
  23. echo $user->write();

输出:
俄罗斯赵忠祥的国籍是:俄罗斯

通过老师的讲解,使我对面向对象有了更深的理解,以前只认为面向对象是为了实现代码复用,其实更重要的就是设计与实现,通过设计与实现来实现抽象到具体,这一过程,面向对象编程如果在实战中能运用好的话,就可以避免很多麻烦,比如一股脑的敲代码,对整体的构造,没有清晰的思路,写到哪就到哪,就永远不会进步。

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