1--TEST-- 2Exception while loading class -- interface case 3--FILE-- 4<?php 5 6spl_autoload_register(function($class) { 7 throw new Exception("Class $class does not exist"); 8}); 9 10class A {} 11 12// Graceful failure allowed 13for ($i = 0; $i < 2; $i++) { 14 try { 15 class B extends A implements I { 16 } 17 } catch (Exception $e) { 18 echo $e->getMessage(), "\n"; 19 } 20} 21 22interface J {} 23 24spl_autoload_register(function($class) { 25 // Tie up B in a variance obligation. 26 class X { 27 public function test(): J {} 28 } 29 class Y extends X { 30 public function test(): B {} 31 } 32}, true, true); 33 34// Fallback to fatal error, as we can't unlink class B anymore. 35try { 36 class B extends A implements I, J { 37 } 38} catch (Exception $e) { 39 echo $e->getMessage(), "\n"; 40} 41 42?> 43--EXPECTF-- 44Class I does not exist 45Class I does not exist 46 47Fatal error: During inheritance of B with variance dependencies: Uncaught Exception: Class I does not exist in %s:%d 48Stack trace: 49#0 %s(%d): {closure}('I') 50#1 {main} in %s on line %d 51