通常,(在子类型定义中)我使用
function enable() {
parent::enable();
}
function disable() {
parent::disable();
}
然后我调用$ subtypeinstance-> enable()
但是我也可以使用像
这样的东西$subtypeinstance->parent::enable()
或
(SupertypeName)$subtypeinstance->enable()
答案 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()
调用超类型方法而不需要在子类型中覆盖父函数