如何从子类的实例调用父类的函数?

时间:2011-11-19 07:23:29

标签: php oop subtype supertype

通常,(在子类型定义中)我使用

function enable() {
  parent::enable();
 }

 function disable() {
  parent::disable();
 }

然后我调用$ subtypeinstance-> enable()

但是我也可以使用像

这样的东西
$subtypeinstance->parent::enable() 

(SupertypeName)$subtypeinstance->enable()

3 个答案:

答案 0 :(得分:2)

根据您的评论:

  

当你不想在每个子类型中覆盖超类型的函数时它会很有用

如果您的所有方法都调用了parent的同名方法,则根本不需要该函数。函数是从父类继承的,这主要是整个继承点。

class Parent {
    public function enable() {
        echo 'enabled';
    }
}

class Child extends Parent { }

$child = new Child;
$child->enable();  // outputs 'enabled'

所以我怀疑你实际上并不需要你所要求的东西。否则,我认为这是不可能的。

答案 1 :(得分:0)

您实际上可以调用Parent::enable()parent::enable()(即类名或parent关键字),因为PHP不区分静态和实例调用,并且无论如何都会传递实例。

class Foo {
    public $x;
    public function bar() {
        echo "Foo::bar(), x is " . $this->x . "\n";
    }
}

class FooChild extends Foo {
    public function bar() {
        echo "FooChild::bar(), x is " . $this->x . "\n";
        Foo::bar();
        parent::bar();
    }
}

$foo = new Foo();
$foo->x = 42;
$foo->bar();

$fooc = new FooChild();
$fooc->x = 43;    
$fooc->bar();

输出:

Foo::bar(), x is 42
FooChild::bar(), x is 43
Foo::bar(), x is 43
Foo::bar(), x is 43

parent keyword reference解释了这个并给出了相同的例子。

答案 2 :(得分:0)

我发现了

$this->function()

调用超类型方法而不需要在子类型中覆盖父函数