Коваріантність в PHP
Шановні форумчани,
interface IPayload { public function toArray(): array; } interface IPayloadFactory { public function create(): IPayload; } class Payload implements IPayload { public function toArray(): array { return ['hello' => 'world']; } } class ChildPayload extends Payload { public function setVar(string $var) { $this->var = $var; } } interface IChildPayloadFactory extends IPayloadFactory { public function create(): ChildPayload; } class ChildPAyloadFactory implements IChildPayloadFactory { public function create(): ChildPayload { return new ChildPayload(); } } $factory = new ChildPAyloadFactory(); var_dump($factory->create());
як результат отримуємо:
Fatal error: Declaration of IChildPayloadFactory::create(): ChildPayload must be compatible with IPayloadFactory::create(): IPayload in /implode.io/script.php on line 34
Наскільки я розумію, це вроді із серії про коваріантність, якої в php, наразі, не має. Може комусь приходилось обходити цю проблему і хтось може поділитись досвідом. Буду вдячний.
35 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів