1<?php 2 3// Requires X, delay to runtime. 4// TODO: It is not actually required, because we don't need X to check inheritance in this case. 5class A extends Z { 6 public function method(X $a) {} 7} 8class B extends Z { 9 public function method($a) : X {} 10} 11 12// Works. 13class C extends Z { 14 public function method($a): self {} 15 public function method2($a): C {} 16} 17class D extends C { 18 public function method($a): self {} 19 public function method2($a): D {} 20} 21 22// Works. 23interface I {} 24interface J extends I {} 25class E { 26 public function method($a): I {} 27} 28class F extends E { 29 public function method($a): J {} 30} 31 32// Requires K & L, delay to runtime. 33class G { 34 public function method($a): K {} 35} 36class H extends G { 37 public function method($a): L {} 38} 39 40// Early-binding preventer. 41class Z { 42 public function method(X $a) {} 43} 44