1--TEST-- 2Variance error in the presence of autoloading (5) 3--FILE-- 4<?php 5 6spl_autoload_register(function($class) { 7 if ($class == 'A') { 8 class A { 9 public function method(): X {} 10 } 11 var_dump(new A); 12 } else if ($class == 'B') { 13 class B extends A { 14 public function method(): Y {} 15 } 16 var_dump(new B); 17 } else if ($class == 'X') { 18 class X { 19 public function method(Y $a) {} 20 } 21 var_dump(new X); 22 } else if ($class == 'Y') { 23 class Y extends X { 24 public function method(Z $a) {} 25 } 26 var_dump(new Y); 27 } else if ($class == 'Z') { 28 class Z extends Y { 29 public function method($a) {} 30 } 31 var_dump(new Z); 32 } 33}); 34 35var_dump(new B); 36 37?> 38--EXPECTF-- 39object(A)#2 (0) { 40} 41object(X)#2 (0) { 42} 43 44Warning: Declaration of Y::method(Z $a) should be compatible with X::method(Y $a) in %s on line %d 45object(Z)#2 (0) { 46} 47object(Y)#2 (0) { 48} 49object(B)#2 (0) { 50} 51object(B)#2 (0) { 52} 53