通常,(在子类型定义中)我使用
function enable() {
parent::enable();
}
function disable() {
parent::disable();
}
然后我调用 $subtypeinstance->enable()
但我也可以使用类似的东西吗
$subtypeinstance->parent::enable()
或者
(SupertypeName)$subtypeinstance->enable()
根据您的评论:
当您不想在每个子类型中覆盖超类型的函数时,它会很有用
如果您的方法所做的只是调用其同名的方法parent
,那么您根本不需要该函数。函数是从父类继承的,这主要是继承的重点。
class Parent {
public function enable() {
echo 'enabled';
}
}
class Child extends Parent { }
$child = new Child;
$child->enable(); // outputs 'enabled'
所以我怀疑你实际上并不需要你所要求的。否则,我认为这是不可能的。
您实际上可以调用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
父关键字参考对此进行了解释并给出了相同的示例。
我发现
$this->function()
调用超类型方法而不需要覆盖子类型中的父函数