Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
(перехватываются incude/require)Все, что нам нужно, чтобы использовать теперь текучий интерфейс в конкретном классе — просто добавить интерфейс — implements FluentInterface.стало
Всё, что нам нужно, чтобы получить связный синтаксис в конкретном классе — просто добавить интерфейс — implements FluentInterface.
Текучий интерфейс (англ. fluent interface, название придумано Эриком Эвансом и Мартином Фаулером)...Но они-то англичане, им совершенно понятна аналогия между fluent English и Fluent Interface. А почему мы должны топорно калькировать их идиомы? Да, в некоторых языках метод реализации иногда совпадает с названием Interface, как в PHP и С#. Но для остальных языков никакой подсказки нет: видим использование контекстносвязанного синтаксиса, который называют «текучим интерфейсом» (?).
Такой стиль косвенно полезен повышением наглядности и интуитивности кода [источник не указан 692 дня].
class AppException extends Exception implements ServiceLayerException
{
}
// ...
try {
throw new AppException();
} catch (ServiceLayerException $e) {
// .. service layer fault
}
@return, ее может вставить сама библиотека АОП, а IDE ее подхватит сама. Насчет магии — это ваш выбор, использовать или нет. Статья имеет исключительно ознакомительный характер, но ваши мысли и опасения мне понятны.@Around("within(FluentInterface+) && execution(public **->set*(*))")
при вызове публичных методов-сеттеров, начинающихся на set, и находящихся в классе, реализующем интерфейс FluentInterface — необходимо возвращать в качестве результата вызова метода сам объект, для которого осуществляется вызов, если метод ничего не возвращаетт
aaaaa
->method1('some text1')
->method2('some text2')
->method3('some text3')
;
bbbbbb
->method1('some text1')
->method2('some text2')
;
ccccc
->method1('some text1')
->method2('some text2')
;
bbbbb->method_c( c );
aaaaa->method_b( b );
красиво отформатированный код, который редко встречается в моей повседневной жизни
with $objectUser do {
method1('1');
method2('2');
method3('3');
}
with $objectUser do {
method1(strtolower($var));
method2(method1('2'));
method3('3')
}
Шаблон программирования «Текучий интерфейс» в PHP. Свежий взгляд