Я прихожу из С#, и я изо всех сил пытаюсь выработать PHP-способ сделать мой код расширяемым.
Давайте скажем, например, у меня есть функция, которая вычисляет мое рекомендуемое суточное потребление пищи. Он смотрит на витамины, калории, минералы и т.д.
Я хочу иметь много разных продуктов питания, которые я использую в своем приложении, и различные функции, которые рассматривают различные аспекты пищи, поэтому я реализую интерфейс IFoodNutrition
и делаю свои классы пищи, которые я хочу быть совместимыми с моей функцией реализовать его. Затем я объявляю, что моя функция принимает его как arg
function GetRda(IFoodNutrition $food){}
В С# я бы указал все свойства, которые мне нужно использовать в интерфейсе, поэтому я знаю, что любой класс, который реализует это, будет совместим с этой функцией.
Что вызывает у меня боль в голове, так это то, что PHP допускает только сигнатуры методов в интерфейсах.
Мои проблемы - это, очевидно, сдвиг парадигмы. Я не уверен, что эквивалентный шаблон в PHP. Я прочитал документацию, и я не вижу подобного как альтернативу, если вы не наследуете от абстрактного класса, но тогда вы можете наследовать только один класс, чтобы он не работал одинаково.
Поскольку PHP не является типичным, мне не нужно создавать интерфейс. Кто-то может просто отправить какой-либо объект методу, и если он обладает необходимыми свойствами в правильном формате, он будет работать. Это просто не кажется мне правильным, хотя я так привык к тому, чтобы излагать, как нужно взаимодействовать с интерфейсами.
Я чувствую, что по крайней мере должен быть какой-то дополнительный шаг в середине, где объект проверяется, и какая-то очевидная структура, которую разработчик может посмотреть, а затем реализовать свой собственный класс интуитивно и увидеть ошибки до выполнения.
Существует ли определенный шаблон в PHP?