
da horsie
23.06.2017
20:01:55

Сергей
24.06.2017
08:24:56

Ivan
24.06.2017
10:26:32
interface Product
{
public function buy();
}
interface ProductFactory
{
public function create(): Product;
}
class Book implements Product
{
public function buy()
{
// implementation
}
}
class BookFactory implements ProductFactory
{
public function create(): Book
{
return new Book();
}
}
BookFactory::create не совместим с ProductFactory::create

Google

Ivan
24.06.2017
10:26:53
кто объяснит, почему это считатется несовместимым?

F01134H
24.06.2017
10:29:25
почему несовместимым
на первый взгляд все кажется логичным

Ivan
24.06.2017
10:30:20
в php так

Like
24.06.2017
10:31:01

Sergey
24.06.2017
10:31:07
Потому что PHP не умеет ковариантность возвращаемых типов.
то есть ты не можешь "сузить" в наследнике возвращаемый тип

F01134H
24.06.2017
10:31:40

Like
24.06.2017
10:31:46

Ivan
24.06.2017
10:31:47
то есть с точки зрения ООП они совместимы, верно?

Admin
ERROR: S client not available

F01134H
24.06.2017
10:31:51

Ivan
24.06.2017
10:31:53
это просто фишка php?

Google

F01134H
24.06.2017
10:32:13

Like
24.06.2017
10:32:18

F01134H
24.06.2017
10:32:42

Sergey
24.06.2017
10:32:44