Size: a a a

2020 July 27

A

Aleksandr Khristenko in PHP
Ну опять же не совсем так. Скорее аргументы не могут быть уже а ресалт не может быть шире.
Кроме ко/контрвариантности есть же еще и инвариантность.
источник

SP

Sergey Protko in PHP
Aleksandr Khristenko
Ну опять же не совсем так. Скорее аргументы не могут быть уже а ресалт не может быть шире.
Кроме ко/контрвариантности есть же еще и инвариантность.
да, так точнее
источник

АГ

Алексей Гевондян... in PHP
interface SomeAbstractProcessor {
public function process(SomeProcessable $toProcess): ProcessResult;
}

class SomeConcreteProcessor implements SomeAbstractProcessor {..}
class Foo implements SomeProcessable {..}
$p = new SomeConcreteProcessor;
$p->process(new Foo())->someResultMethod();
источник

АГ

Алексей Гевондян... in PHP
типа проблема в том, что результат тоже разных типов может быть?
источник

АГ

Алексей Гевондян... in PHP
допустим ProcessResult это некий интерфейс. конкретная реализация возвращает некий класс, реализующий этот интерфейс. получается что возвращаемое значение сузится в реализации. с этим проблема будет?
источник

АГ

Алексей Гевондян... in PHP
вроде не должно быть... или ошибаюсь?
источник

A

Aleksandr Khristenko in PHP
Алексей Гевондян
почему в этом примере нельзя ввести еще пару интерфейсов?
Потому что эта хрень объявляет зависимость на уровне типов. Просто интерфейсами такое не сделать.
источник

АГ

Алексей Гевондян... in PHP
проблемы могут возникнуть разве что с тем, что нам надо допустим передать строку / число. а мы не сможем, т.к. нужен интерфейс. придется заворачивать строку / число в класс, реализующий этот интерфейс... ну вот только такое разве что в голову приходит...
источник

A

Aleksandr Khristenko in PHP
Все эти приседания с генериками нужны для того, чтобы доказать стат-анализатору что у тебя корректная программа, не более.
источник

A

Aleksandr Khristenko in PHP
Алексей Гевондян
проблемы могут возникнуть разве что с тем, что нам надо допустим передать строку / число. а мы не сможем, т.к. нужен интерфейс. придется заворачивать строку / число в класс, реализующий этот интерфейс... ну вот только такое разве что в голову приходит...
Нет.
источник

АГ

Алексей Гевондян... in PHP
интерфейс это же абстракция, зависимость от абстракции это проблема разве? а в дженериках зависимости от "чего-то" нет? с этим "чем-то" тоже ведь какие-то действия совершаются... все-таки некий интерфейс (набор допустимых манипуляций) подразумевается...
источник

АГ

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

A

Aleksandr Khristenko in PHP
Алексей Гевондян
скорее тут не проблема, а просто громоздкость, многословность, неудобство...
Ты на языках со статической типизацией и развитой системой типов писал?
источник

АГ

Алексей Гевондян... in PHP
на плюсах много писал.
источник

АГ

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

АГ

Алексей Гевондян... in PHP
там под каждый тип отдельная реализация
источник

АГ

Алексей Гевондян... in PHP
в пыхе этой проблемы нет же
источник

A

Aleksandr Khristenko in PHP
>_<
источник

A

Aleksandr Khristenko in PHP
начнем с того, что в сях вроде не дженерики а шаблоны, т.е. там чуть другая штука
источник

АГ

Алексей Гевондян... in PHP
а, ну вот, получается что шаблоны и дженерики это разное... вот это для меня новость.. это уже интересная история.
источник