Есть базовый класс MyBase. Моя цель гарантировать, что в каждом наследнике будет объявлен метод myMethod, но мне нужна свобода в объявлении аргументов.
Т.е. мне нужно примерно следующее
abstract class MyBase
{
abstract public function myMethod();
}
class Foo extends MyBase
{
public function myMethod(string $s)
{
//
}
}
Но, по понятным причинам, в таком виде я сделать этого не могу.
Проблему могу решить, убрав вообще абстрактный метод myMethod в классе MyBase. Но таким образом я лишь обхожу проблему, а не решаю ее.
Можно ли сделать это "правильно"? Или вообще такой подход некорректен и по-хорошему надо делать как-то иначе?
Конкретный пример: класс для некой задачи (например достать данные из бд, преобразовать некоторые данные и т.д.), у который есть метод run; базовый класс реализует внутренние процессы (например логгирование в бд, вывод инфы в консоль, запуск хуков и т.д.) и запуск метода run; каждая конкретная задача может принимать аргументы для своего исполнения => аргументы хочется принимать именно в методе run с проверкой типов.