Covariance¶
Covariance allows a child’s method to return a more specific type than the return type of its parent’s method.
This means that the type of the return value in the method foo of the child class X can be a child of the type of the return value in the method foo of the parent class W.
Less specific types can be: the same type W, a child class of the W type, here X, an intersectional type, such as W&Z. In particular, the type may not become nullable.
It cannot be a totally different type, an union type, such as W|A, any class that implements the same interfaces than W, or a different scalar type.
<?php
class V {}
class W extends V {
function foo() : W { }
}
class X extends W {
// This method returns an object compatible with w, but more specific
function foo() : X { }
}
?>
See also Type variance in PHP and Covariance and Contravariance in PHP.
Related : Contravariance, Type Invariant, LSP, Return Type, Return, Liskov Substitution Principle (LSP)
Added in PHP 7.4+