-1

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

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

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

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

但我也可以使用类似的东西吗

$subtypeinstance->parent::enable() 

或者

(SupertypeName)$subtypeinstance->enable()
4

3 回答 3

2

根据您的评论:

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

如果您的方法所做的只是调用其同名的方法parent,那么您根本不需要该函数。函数是从父类继承的,这主要是继承的重点。

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

class Child extends Parent { }

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

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

于 2011-11-19T07:45:33.000 回答
0

您实际上可以调用Parent::enable()or 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

父关键字参考对此进行了解释并给出了相同的示例。

于 2011-11-19T08:02:46.973 回答
0

我发现

$this->function()

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

于 2011-11-19T08:05:09.183 回答