【问题标题】:Polymorphism in PHP: Virtual function overrides parent function but parent function still gets calledPHP中的多态性:虚函数覆盖父函数但仍调用父函数
【发布时间】:2011-09-13 07:06:20
【问题描述】:

我一直在用 C++ 编程,但已经转向 PHP 有一段时间了,PHP 中的多态性似乎有所不同。我知道在 PHP 中,所有非私有(即公共/受保护)的函数实际上也是虚拟的。这是我的子类定义

class Child extends Parent {
   public function foo() {

   }
}

那么我的父母看起来像

class Parent {
    public function foo() {

    }
}

我希望我的子类使用除 foo() 函数之外的所有父代码 - 我希望子类使用它自己的 foo() 函数。

问题是父母的foo() 仍然被调用。有趣的是,我的 IDE (NetBeans) 说它被正确覆盖了。

我在父母和孩子中使用$this->foo().. 这应该可以吧?它只是说'为当前对象执行函数 foo'.. 也许我在这里出错了?

【问题讨论】:

  • Parent::foo 在执行$child->foo() 时不应被调用。你的代码可能有问题。你能发布一个展示这种行为的例子吗?
  • 大家好,感谢您的帮助。原来我很傻。我正在提交一个页面,在提交的页面上,它创建了一个在提交页面上定义的类的对象,我正在包含文件!对不起:-S。

标签: php


【解决方案1】:

除非你调用parent::foo(),否则不会调用父级的foo()

【讨论】:

    【解决方案2】:

    刚试过:

    class Child1 extends Parent1 {
    
        public function foo() {
            echo 'c';
        }
    
    }
    
    class Parent1 {
    
        public function foo() {
            echo 'p';
        }
    
    }
    
    
    
    $class = new Child1;
    
    $class->foo();
    

    打印“c”

    你做的一切都是对的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 2022-12-04
      • 2011-05-14
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 2011-09-01
      相关资源
      最近更新 更多