PHP面向对象的理解(1)

小咪咪 2022-07-13 02:17 286阅读 0赞

PHP中虚函数的理解:

相比其他语言,如C++,PHP语言有很多不同之处。

看个例子:

  1. <?php
  2. // 定义父类
  3. class P {
  4. public function name(){
  5. echo "P::name() is called. \n";
  6. }
  7. public function getName1(){
  8. self::name();
  9. echo "P::getName1 is called. \n";
  10. }
  11. public function getName2(){
  12. $this->name();
  13. echo "P::getName2() is called. \n";
  14. }
  15. }
  16. // 定义子类,继承父类P
  17. class S extends P{
  18. public function name(){
  19. echo "S::name() is called. \n";
  20. }
  21. }

测试方法如下:

  1. $s = new S;
  2. $s->getName1();
  3. echo '<br/>';
  4. echo '<br/>';
  5. echo '<br/>';
  6. $s->getName2();

那么,这将会输出什么呢?

在C++中,有virtual关键字定义类中的函数为虚函数。如果父类定义了 name () 函数为虚函数,并且在子类中被覆盖,那么将会调用子类的 name() 方法;否则调用父类的方法。

PHP中没有virtual关键字,靠的是 self 和 $this 关键字实现虚函数的功能。self 关键字调用的是父类的方法,$this 调用的是子类的方法。

那么这里将输出:

P::name() is called.

P::getName1 is called.

S::name() is called.

P::getName2() is called.

如果 一个G类继承S类,那么会怎么样呢?

  1. class G extends S(){
  2. public function name(){
  3. echo "G::name() is called.\n";
  4. }
  5. }
  6. $g = new G;
  7. $g->getName1();
  8. echo '<br/>';
  9. echo '<br/>';
  10. $g->getName2();
  11. 那么这里将输出:这里不会调用S中间类的 name() 方法。
  12. P::name() is called.
  13. P::getName1 is called.
  14. G::name() is called.
  15. P::getName2() is called.
  16. >>> 如果子类G想使用S类的 name() 方法,可以在S类中重写P类的 getName 方法。
  17. // 定义子类,继承父类P
  18. class S extends P{
  19. public function name(){
  20. echo "S::name() is called. \n";
  21. }
  22. public function getName1(){
  23. slef::name();
  24. echo "S::getName1() is called. \n";
  25. }
  26. }

发表评论

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

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

相关阅读

    相关 PHP面向对象1.5 继承

    > 在C++中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个继承称为多继承。但在PHP中和java语言一样没有多继承,只能使用单继

    相关 PHP面向对象1.4 封装性

    1. 基本的概念 > 封装性 > > > 把对象的全部成员属性和全部成员方法结合在一起,形成一个不可分割的独立单位(即对象) > > 信息隐蔽,即尽可能隐蔽对象的内

    相关 认真学习php面向对象-1

    认真学习php面向对象-1 前言 准备写一个认真学习php面向对象的系列,使用php来做网页,没有深入了解php的话,可能三板斧就够了,并不需要有多高深!如有错误,

    相关 php面向对象

    近一段时间有一种学习的强烈欲望,出现了经济危机啊。现在的工资连最基本的生活都不能保证啊,想尽快的摆脱现在的这种局面。 昨天晚上把PHP的面向对象编程的一些最基本的概念看了看。