- Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
<?php
interface I {}
interface J {}
// Simulate a "never" parameter type.
interface AlmostNever extends I, J {}
class C implements I {}
interface Base {
public function foo(AlmostNever $x): mixed;
}
interface ReturnI extends Base {
public function foo(AlmostNever $x): I;
}
interface AcceptI extends Base {
public function foo(I $x): mixed;
}
class AcceptReturnI implements AcceptI, ReturnI {
public function foo(I $x): I {
return $x;
}
}
function f(AcceptI&ReturnI $callme, I $x): I {
return $callme->foo($x);
}
f(new AcceptReturnI(), new C());