Как я вызываю функции родительского класса из экземпляра подкласса? - PullRequest
0 голосов
/ 19 ноября 2011

обычно, (в определении подтипа) я использую

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

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

и затем я вызываю $ subtypeinstance-> enable ()

но могу ли я использовать что-то вроде

$subtypeinstance->parent::enable() 

или

(SupertypeName)$subtypeinstance->enable()

Ответы [ 3 ]

2 голосов
/ 19 ноября 2011

Основано на вашем комментарии:

было бы полезно, если вы не хотите переопределять функции супертипа в каждом из подтипов

Если все, что делает ваш метод, это вызывает метод с тем же именем, что и его parent, то вам вообще не нужна эта функция. Функции унаследованы от родительского класса, это в основном весь смысл наследования.

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

class Child extends Parent { }

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

Так что я подозреваю, что вам на самом деле не нужно то, что вы просите. Иначе я не думаю, что это возможно.

0 голосов
/ 19 ноября 2011

Я обнаружил, что

$this->function()

вызывает методы супертипа без необходимости переопределения родительских функций в подтипах

0 голосов
/ 19 ноября 2011

На самом деле вы можете вызвать 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

Ссылка на родительское ключевое слово 1011 * объясняет это и приводит тот же пример.

...