Является ли расширение типов параметров в реализации интерфейса PHP хорошей практикой?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Является ли расширение типов параметров в реализации интерфейса PHP хорошей практикой?

Сообщение Anonymous »

У меня есть интерфейс, определенный следующим образом:

Код: Выделить всё

interface MyInterface
{
public function myMethod(int $a);
}
И у меня есть класс, который расширяет тип параметра:

Код: Выделить всё

class MyClass implements MyInterface
{
public function myMethod(int|string $a) {}
}
В таких языках, как Java или C#, я мог бы использовать перегрузку методов для определения двух методов с именем myMethod: один с int $a для соответствия интерфейсу, а другой со строкой $a в качестве новой реализации.
В PHP перегрузка методов достигается за счет использования типов объединения, как я сделал выше.
Среда выполнения PHP поддерживает этот подход (проверено на версиях 8.1, 8.2 и 8.3).
Мой вопрос: приемлемо ли это? Нарушаю ли я этим какие-либо передовые методы PHP?
Я не уверен, нарушает ли это принцип подстановки Лискова. Классы, ожидающие реализации MyInterface, по-прежнему должны работать корректно. Однако если одна часть приложения использует MyClass, а затем заменена другим классом, обеспечивающим «чистую» реализацию MyInterface, существует риск поломки приложения.
С моей точки зрения, поскольку я могу выбирать, какую реализацию интерфейса использовать в своем приложении, это должно быть нормально. Однако я хочу быть уверен, что не создаю никаких потенциальных проблем.

Подробнее здесь: https://stackoverflow.com/questions/793 ... d-practice
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»