ReflectionClass_implementsInterface_001.phpt 4.7 KB

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