
Sergey
24.06.2017
10:32:56
до тех пор пока ты соблюдаешь LSP - все хорошо

F01134H
24.06.2017
10:32:58
ну кстати да

Sergey
24.06.2017
10:33:37
в твоем случае если у тебя наследник усилил пост-условия (о том что он не всякий Product будет возвращать а только Book, который является подтипом Product), то с точки зрения LSP все хорошо.

Ivan
24.06.2017
10:33:51
так а где плохо?

Google

Sergey
24.06.2017
10:34:28
когда ты усиливаешь пред-условия. Типа у тебя интерфейс на ВХОД принимал Product и в наследнике ты хочешь не просто Product а Book. Вот в этом случае LSP нарушен.

Ivan
24.06.2017
10:34:49
это понимаю
предусловия не сильнее
постусловия не слабее

Sergey
24.06.2017
10:35:54
ну тип того, но... увы PHP не умеет ковариантность типов, а стало быть ты физически ограничен. Где-то была RFC что бы это разрешить но хз как оно там
сча попробуй найти
самому интересно
а не.... нету. Было просто мельком в internals и как-то заглохло.
Но, в 7.2 можно будет хотя бы убирать типы в наследниках для входа (ослоблять прекондишены)
https://wiki.php.net/rfc/parameter-no-type-variance
это конечно не то что надо, но...

F01134H
24.06.2017
10:41:59
в принципе
разницы нет, book там или product

Google

Sergey
24.06.2017
10:42:13
может замутить RFC...

F01134H
24.06.2017
10:42:31
по сути book все равно реализует product

Admin
ERROR: S client not available

F01134H
24.06.2017
10:42:59
Сергей наверное знает какие подводные камни есть

Aleh
24.06.2017
10:44:37
Ну, когда ты знаешь, что там именно book, надо делать лишнюю проверку

Sergey
24.06.2017
10:44:56
по сути book все равно реализует product
на это надо смотреть исходя из задачи. К примеру:
$book = $bookFactory->make('War and Peace'); // $book instanceof Book
$food = $foodFactory->make('Fish and Chips'); // $food instanceof Food
class Book implements Product, Readable;
class Food implements Product, Eatable;
то есть у тебя Book может иметь дополнительное поведение на которое завязан клиент
и ему очень важно что бы фабрика вернула именно Book.
то есть в качестве зависимости у нее будет не просто ProductFactoryInterface а скорее BookFactory
пример немного высосан из пальца, лень придумывать что-то из реальной жизни.
но идея тут именно в ISP, то есть смотреть надо не только на сами типы, но то кто и зачем их хочет использовать