Какая реальная утилита, Интерфейс в PHP?


и Я знаю, q interface используется как общий стандарт. Но я не кажется, чтобы быть полезным. Потому что смысла в создании интерфейса, который собор имеет имя метода?

Я должен кодировать каждый из них в классе, который реализует интерфейс. Какой выигрыш?

Author: Maniero, 2018-09-01

2 answers

В PHP? На самом деле не имеет много преимуществ, но меняется с метаморфозы языка.

Если вы являетесь программирования, как PHP был разработан, на самом деле не имеет смысла, потому что интерфейс-это механизм контракт", где вы говорите, что методы типа того, и там можно создать типы, которые соответствуют с ней, и в вашем коде вы можете сказать, что-то принимает интерфейс и там любой объект, который реализует интерфейс может быть использован там, так как он отвечает требованиям ее.

Способ дать имя для операции, что объект может делать, а потом можете сказать, что принимает объекты, которые знают, как делать операцию. Так что это механизм для обеспечения надежности, обеспечения безопасности типа.

Но PHP-это язык с динамической типизацией, и не имеет смысла просить защиты тип в языке, так. PHP-это язык сценария и не должны иметь дело с этим типом сложности.

- Это правда, что PHP, поняли, что это не очень хорошо и меняется и философия, но не дает, чтобы упаковать все из-за вопросов совместимости, то он получает одно гибридное и имеет худшее из двух миров (часть лучше тоже, конечно, но частично, не помогает, как так).

Хочет безопасности типов? Здорово, используйте языком статической типизации, что заставляет это происходить во всех случаях. Любите PHP? Используйте Рубить. Кроме подумайте, Java, C#, эти вещи.

Не заботится о безопасности типов? Ок, если это действительно то, что вы делаете сценария она не так нужна, но потом становится странно использовании интерфейс.

Если вы понимаете все, что вы делаете в коде вы увидите, что часть из того, что проповедуется сегодня в PHP не имеет смысла. Люди используют без вопросов. Хорошо, что спросил.

См.:

 6
Author: Maniero, 2020-08-04 19:46:34

Я думал точно так же, но интерфейс, позволяет избежать дублирования кода, когда у вас есть различные варианты поведения того же типа объекта.

Представьте, что вы используете базу данных Mysql, и вы, имеет класс Connection . Этот класс делает прямое соединение с Mysql.

Теперь представьте, что вся ваша настойчивость слой имеет соединения класса и пришел новый клиент, которому необходимо иметь новую базу данных, и теперь гнев помощью двух баз данные.

, То вы должны изменить свой код, поддержка новой базы и обеспечение поддержки на базе предыдущего. То есть в некоторых местах будет Подключение Mysql и в других Connection новой базы.

, Чтобы избежать двух Connections, делают то же самое, вы создаете интерфейс для Подключения и Классов ConnectionMysql и ConnectionPostgree будет осуществлять она.

Теперь ваш код может использовать интерфейс Подключения, а не классов или ConnectionMysql ConnectionPostgree.

 -4
Author: Saulo Campos, 2018-09-01 17:01:56