Я хотел бы знать, возможно ли это в объектно-ориентированном программировании на php. У меня есть контроллер
class BaseController extends Controller{
/**
* @Route("/sample", name = "sample")
*/
public function postSampleAction(Request $request){
}
}
и у меня есть файл под названием ProductEvent и PriceEvent
class ProductEvent extends BaseController{
public function checkEvent(){
echo "product event";
}
}
class PriceEvent extends BaseController{
public function checkEvent(){
echo "price event";
}
}
как видите, я расширяю BaseController. Я хочу, чтобы мне нужно было поместить checkEvent() в BaseController в postSampleActioin().
class BaseController extends Controller{
/**
* @Route("/sample", name = "sample")
*/
public function postSampleAction(Request $request){
$this->checkEvent();
}
}
Я не знаю, правильный ли это способ. Я хочу проверить, будет ли это повторять функцию checkEvent().
Извините моя ошибка. Забыл добавить, какой фреймворк я использовал. Я использовал для этого symfony.
Лучше реализовать функцию checkEvent() в родительском классе. Тогда дочерние классы могут легко переопределить.
Каковы ваши точные требования? Ваш подход не поддерживает ваше требование.
все, что я просто хочу, это повторить функцию checkEvent () в BaseConroller, когда маршрут вызывает postSampleAction (). Я уже добавляю функцию checkEvent в родительский элемент, но ничего эха.
Вы спрашиваете, возможно ли это или это хороший способ сделать это? Потому что тестирование должен был дать вам результат довольно легко ...
@yivi спасибо за ссылку. Да, я спрашиваю, возможно ли это, но, похоже, это работает только в одном направлении.






Это означает, что вы хотите сделать BaseController классом неполный, абстрактный, который необходимо унаследовать и реализовать там метод checkEvent:
abstract class BaseController extends Controller {
public function postSampleAction(Request $request) {
$this->checkEvent();
}
abstract public function checkEvent();
}
Теперь вы не можете создать экземпляр BaseController отдельно, и любой наследующий неабстрактный класс должен реализовывать checkEvent; это дает вам требуемую безопасность типа, которая позволяет вам полагаться на checkEvent в postSampleAction.
Прошу прощения за мою большую ошибку. Я думал, что проблема в ООП. Забыл добавить, какой фреймворк использовал. Это применимо, но путь Symfony не работает. Снова извините. :(
Это невозможно. Наследование просто идет в одном направлении. вам нужно будет реализовать эту функцию в вашем Basecontroller, и она будет доступна в ваших дочерних классах.