Size: a a a

2020 December 29

DP

Dmitri Ponomarjov in PHP
Konstantin
разработчик просто может забыть описать его в интерфейсе
Так можно очень далеко зайти
источник

АС

Альберт Степанцев... in PHP
Ну так это проблема Константина
источник

АС

Альберт Степанцев... in PHP
Что он полагается на публичные методы, которых нет в интерфейсе
источник

АС

Альберт Степанцев... in PHP
а не проблема языка
источник

AB

Anton Belonovich in PHP
Ага, ССЗБ
источник

АС

Альберт Степанцев... in PHP
Konstantin
ПРосто логично было бы если бы пыха ругалась
совершенно нелогично
реализация классом интерфейса не значит, что класс не может содержать и другие тоже методы
источник

АС

Альберт Степанцев... in PHP
а вот вы пишете код нелогично
источник

K

Konstantin in PHP
Альберт Степанцев
совершенно нелогично
реализация классом интерфейса не значит, что класс не может содержать и другие тоже методы
Вы класс читаете или интерфейс ?
источник

AB

Anton Belonovich in PHP
IDE вот может поругаться или плагин или анализатор. Для этого они и существуют
источник

АС

Альберт Степанцев... in PHP
в одном месте требуя интерфейс
а в другом - забивая на него
источник

K

Konstantin in PHP
Я лично привык читать интерфейс, такая привычка у меня пришла из других языков
источник

AB

Anton Belonovich in PHP
Согласен, пых не должен ругаться. Ему в рантайме передан объект с методом, какие вопросы
источник

AB

Anton Belonovich in PHP
Konstantin
разработчик просто может забыть описать его в интерфейсе
Пишите интерфейс сначала, юзайте его методы, попутно пишите юнит, мокая этот интерфейс.
А потом уже класс-реализацию. Тогда ничего не забудете. Всё уже придумано до нас )
источник

ИЛ

Иван Лещёв in PHP
Konstantin
Странный момент в пыхе или это только в ларике.
Есть интерфейс с методами и есть класс в котором есть реализация этих методом. Причём в классе есть методы которые не описаны в интерфейсе. Так вот, есть возможность вызвать через интерфейс методы класса которые не описаны в интерфейсе. Это же как то не правильно или я что-то не догоняю?
да, это неправильно, но это возможно
анализаторы должны ругаться и шторм должен подсветить
источник

КГ

Константин Грачев... in PHP
Dmitriy Tkachenko
да, 10-30 сек на е2е - это слишком оптимистично)
оч долго получилось)
источник
2020 December 30

АГ

Алексей Гевондян... in PHP
класс C знает, что использует интерфейс B. в интерфейсе  B нет метода getSecond. конечно оно упадет лишь в рантайме, если передать туда класс без этого метода - но есть одна ошибка: почему класс, зависящий от интерфейса, пытается дернуть то, чего в этом интерфейсе нет? 3 пути: 1) добавить getSecond в интерфейс. 2) поменять зависимость класса C с интерфейса B на класс A. 3) завести интерфейс с методом getSecond (пусть это будет interface D), но тут надо хитрый трюк провернуть, $interfaceB в классе C должен иметь  экзотический тип B & D. т.е. не "или" (когда может не быть чего-то), а именно "и". стат анализаторы вроде поддерживают такое, но все-таки, тут наверное уж тогда звести еще interface E extends B, D, либо просто Interface D extends B, и добавить туда getSecond. как-то так...
источник

SP

Sergey Protko in PHP
Алексей Гевондян
класс C знает, что использует интерфейс B. в интерфейсе  B нет метода getSecond. конечно оно упадет лишь в рантайме, если передать туда класс без этого метода - но есть одна ошибка: почему класс, зависящий от интерфейса, пытается дернуть то, чего в этом интерфейсе нет? 3 пути: 1) добавить getSecond в интерфейс. 2) поменять зависимость класса C с интерфейса B на класс A. 3) завести интерфейс с методом getSecond (пусть это будет interface D), но тут надо хитрый трюк провернуть, $interfaceB в классе C должен иметь  экзотический тип B & D. т.е. не "или" (когда может не быть чего-то), а именно "и". стат анализаторы вроде поддерживают такое, но все-таки, тут наверное уж тогда звести еще interface E extends B, D, либо просто Interface D extends B, и добавить туда getSecond. как-то так...
Он не просил как пофиксить, он просто открыл для себя магию автовайринга в di
источник

А

Антон in PHP
Алексей Гевондян
класс C знает, что использует интерфейс B. в интерфейсе  B нет метода getSecond. конечно оно упадет лишь в рантайме, если передать туда класс без этого метода - но есть одна ошибка: почему класс, зависящий от интерфейса, пытается дернуть то, чего в этом интерфейсе нет? 3 пути: 1) добавить getSecond в интерфейс. 2) поменять зависимость класса C с интерфейса B на класс A. 3) завести интерфейс с методом getSecond (пусть это будет interface D), но тут надо хитрый трюк провернуть, $interfaceB в классе C должен иметь  экзотический тип B & D. т.е. не "или" (когда может не быть чего-то), а именно "и". стат анализаторы вроде поддерживают такое, но все-таки, тут наверное уж тогда звести еще interface E extends B, D, либо просто Interface D extends B, и добавить туда getSecond. как-то так...
Оно не упадёт.
источник

S

Sergey in PHP
Люди пишут что-то на Ларе, не зная основ языка, классика, хуле)
источник

K

Konstantin in PHP
Sergey
Люди пишут что-то на Ларе, не зная основ языка, классика, хуле)
Основы я знаю, может даже поболее вашего. Не надо судить по себе и токсить
источник