Blogger Information
Blog 36
fans 1
comment 0
visits 29654
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP与面向对象编程
Jason
Original
1001 people have browsed it

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();

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

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

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