Для меня это больше похоже на проблему дизайна.Однако, если бы я справился с этим способом, который был бы легко читаем и без переосмысления моего дизайна, я бы сделал:
<?php
class Foo {
public function func() { return 'foo'; }
}
class Bar extends Foo {
public function func() { return 'bar'; }
public function parentFunc() { return parent::func(); }
}
$obj = new Bar();
$obj->parentFunc(); // returns of course 'foo'
Ответ Лука также работает, но не вызывает метод для родительского объекта.Он просто вызывает метод для родительского класса.Все зависит от функциональности, которую вы ищете.
Вы также можете сделать что-то вроде:
<?php
class Foo {
public function func() { return 'foo'; }
}
class Bar extends Foo {
public function func($parent = false) {
if ($parent) {
return parent::func();
}
return 'bar';
}
}
$obj = new Bar();
$obj->func(true); // returns of course 'foo'
Что похоже, но без необходимости дополнительного метода.
Лично мне кажется, что эта проблема, скорее всего, требует переосмысления в дизайне кода, а не решения для кодирования.
- edit -
Чтобы подробнее остановиться на «переосмыслении в дизайне кода», я быСпросите себя: «Зачем мне нужен объект, у которого есть два метода с одинаковым именем, но разными функциональными возможностями? Разве это не работа для двух разных объектов? Отслеживайте проблему в обратном направлении, пока не найдете проблему проектирования. Или точку, в которой принимается решение».необходимо указать, какой объект требуется вашей структуре.