1--TEST-- 2ReflectionClass::implementsInterface() 3--CREDITS-- 4Robin Fernandes <robinf@php.net> 5Steve Seear <stevseea@php.net> 6--FILE-- 7<?php 8interface I1 {} 9class A implements I1 {} 10class B extends A {} 11 12interface I2 extends I1 {} 13class C implements I2 {} 14 15$classNames = array('A', 'B', 'C', 'I1', 'I2'); 16 17foreach ($classNames as $className) { 18 $rcs[$className] = new ReflectionClass($className); 19} 20 21foreach ($rcs as $childName => $child) { 22 foreach ($rcs as $parentName => $parent) { 23 echo "Does " . $childName . " implement " . $parentName . "?\n"; 24 echo " - Using object argument: "; 25 try { 26 var_dump($child->implementsInterface($parent)); 27 } catch (Exception|TypeError $e) { 28 echo $e->getMessage() . "\n"; 29 } 30 echo " - Using string argument: "; 31 try { 32 var_dump($child->implementsInterface($parentName)); 33 } catch (Exception|TypeError $e) { 34 echo $e->getMessage() . "\n"; 35 } 36 } 37} 38 39 40 41echo "\n\nTest bad arguments:\n"; 42try { 43 $rcs['A']->implementsInterface(); 44} catch (ArgumentCountError $e) { 45 echo $e->getMessage() . "\n"; 46} 47try { 48 $rcs['A']->implementsInterface('C', 'C'); 49} catch (ArgumentCountError $e) { 50 echo $e->getMessage() . "\n"; 51} 52try { 53 $rcs['A']->implementsInterface(null); 54} catch (ReflectionException $e) { 55 echo $e->getMessage() . "\n"; 56} 57try { 58 $rcs['A']->implementsInterface('ThisClassDoesNotExist'); 59} catch (ReflectionException $e) { 60 echo $e->getMessage() . "\n"; 61} 62try { 63 $rcs['A']->implementsInterface(2); 64} catch (ReflectionException $e) { 65 echo $e->getMessage() . "\n"; 66} 67?> 68--EXPECTF-- 69Does A implement A? 70 - Using object argument: A is not an interface 71 - Using string argument: A is not an interface 72Does A implement B? 73 - Using object argument: B is not an interface 74 - Using string argument: B is not an interface 75Does A implement C? 76 - Using object argument: C is not an interface 77 - Using string argument: C is not an interface 78Does A implement I1? 79 - Using object argument: bool(true) 80 - Using string argument: bool(true) 81Does A implement I2? 82 - Using object argument: bool(false) 83 - Using string argument: bool(false) 84Does B implement A? 85 - Using object argument: A is not an interface 86 - Using string argument: A is not an interface 87Does B implement B? 88 - Using object argument: B is not an interface 89 - Using string argument: B is not an interface 90Does B implement C? 91 - Using object argument: C is not an interface 92 - Using string argument: C is not an interface 93Does B implement I1? 94 - Using object argument: bool(true) 95 - Using string argument: bool(true) 96Does B implement I2? 97 - Using object argument: bool(false) 98 - Using string argument: bool(false) 99Does C implement A? 100 - Using object argument: A is not an interface 101 - Using string argument: A is not an interface 102Does C implement B? 103 - Using object argument: B is not an interface 104 - Using string argument: B is not an interface 105Does C implement C? 106 - Using object argument: C is not an interface 107 - Using string argument: C is not an interface 108Does C implement I1? 109 - Using object argument: bool(true) 110 - Using string argument: bool(true) 111Does C implement I2? 112 - Using object argument: bool(true) 113 - Using string argument: bool(true) 114Does I1 implement A? 115 - Using object argument: A is not an interface 116 - Using string argument: A is not an interface 117Does I1 implement B? 118 - Using object argument: B is not an interface 119 - Using string argument: B is not an interface 120Does I1 implement C? 121 - Using object argument: C is not an interface 122 - Using string argument: C is not an interface 123Does I1 implement I1? 124 - Using object argument: bool(true) 125 - Using string argument: bool(true) 126Does I1 implement I2? 127 - Using object argument: bool(false) 128 - Using string argument: bool(false) 129Does I2 implement A? 130 - Using object argument: A is not an interface 131 - Using string argument: A is not an interface 132Does I2 implement B? 133 - Using object argument: B is not an interface 134 - Using string argument: B is not an interface 135Does I2 implement C? 136 - Using object argument: C is not an interface 137 - Using string argument: C is not an interface 138Does I2 implement I1? 139 - Using object argument: bool(true) 140 - Using string argument: bool(true) 141Does I2 implement I2? 142 - Using object argument: bool(true) 143 - Using string argument: bool(true) 144 145 146Test bad arguments: 147ReflectionClass::implementsInterface() expects exactly 1 argument, 0 given 148ReflectionClass::implementsInterface() expects exactly 1 argument, 2 given 149 150Deprecated: ReflectionClass::implementsInterface(): Passing null to parameter #1 ($interface) of type ReflectionClass|string is deprecated in %s on line %d 151Interface "" does not exist 152Interface "ThisClassDoesNotExist" does not exist 153Interface "2" does not exist 154