Коваріантність в 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 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів