Size: a a a

2020 May 06

АС

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

АС

Альберт Степанцев... in PHP
Знаете фразу про "Я знаю, что у задачи нет решения, но мне это неинтересно, мне интереснее другое - как ее решать?"
источник

ЕР

Евгений Ромашкан... in PHP
Я тебе написал почему оно не работает)
источник

АС

Альберт Степанцев... in PHP
Евгений Ромашкан
Конечно, ты контракт сломал. Нельзя же будет через интерфейс вызвать метод foo() без аргументов, если они в наследнике обязательные
ОК, как тогда записать контракт "будет произвольное число аргументов" по вашему?
источник

ЕР

Евгений Ромашкан... in PHP
А по поводу задачи - чую что кто-то решил интерфейсы для контроллеров/хэндлеров заделать
источник

S

SarcasmIO in PHP
Альберт Степанцев
ОК, как тогда записать контракт "будет произвольное число аргументов" по вашему?
...args
источник

АС

Альберт Степанцев... in PHP
SarcasmIO
...args
этот ответ мне тоже известен, спасибо
источник

АС

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

S

SarcasmIO in PHP
Альберт Степанцев
Коллеги, что-то я туплю с утра, просветите идиота...

Я правильно понимаю, что в PHP нет возможности сделать интерфейс, в нем прописать метод, а в сигнатуре метода указать, что в реализации у метода будет произвольное количество любых аргументов?

Единственный способ это так:

interface I {
 public function foo();
}

class C implements I {
 public function foo($x1 = null, $x2 = null) {}
}


то есть делать в реализации все аргументы опциональными?
ну или заморачиваться с ... оператором

вопрос "нахрена это нужно" прошу опустить
в теории если C что-то отнаследует то в foo() можно будет буквально что угодно пихать. но не советую
источник

АС

Альберт Степанцев... in PHP
SarcasmIO
в теории если C что-то отнаследует то в foo() можно будет буквально что угодно пихать. но не советую
вы уверены?
источник

АС

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

ЕР

Евгений Ромашкан... in PHP
SarcasmIO
в теории если C что-то отнаследует то в foo() можно будет буквально что угодно пихать. но не советую
php откинет такой код как в примере, с ошибкой что методы не совместимы
источник

АС

Альберт Степанцев... in PHP
SarcasmIO
в теории если C что-то отнаследует то в foo() можно будет буквально что угодно пихать. но не советую
нет, как я и предполагал, это неверно
источник

АС

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

S

SarcasmIO in PHP
Евгений Ромашкан
php откинет такой код как в примере, с ошибкой что методы не совместимы
я про возможность расширить декларацию родителя из 7.1
источник

S

SarcasmIO in PHP
она работает, но это не стоит того
источник

АС

Альберт Степанцев... in PHP
SarcasmIO
я про возможность расширить декларацию родителя из 7.1
покажите пример
как можно расширить не опциональными аргументами?
источник

ЕР

Евгений Ромашкан... in PHP
SarcasmIO
я про возможность расширить декларацию родителя из 7.1
Чёт я не припоминаю такого https://wiki.php.net/rfc#php_71
источник

ЕР

Евгений Ромашкан... in PHP
Контрвариантность и ковариантность в 7.4 починили, знаю, и всё. но там речь про расширение типа аргумента
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in PHP
Альберт Степанцев
покажите пример
как можно расширить не опциональными аргументами?
Зачем для такого метода интерфейс? Вы собираетесь принимать интерфейс и передавать параметры в метод, как для наследника? Тут явное нарушение сразу двух принципов: DIP и LSP
источник