interface_implemented.phpt 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. --TEST--
  2. ZE2 An interface is inherited
  3. --FILE--
  4. <?php
  5. interface if_a {
  6. function f_a();
  7. }
  8. interface if_b extends if_a {
  9. function f_b();
  10. }
  11. class base {
  12. function _is_a($sub) {
  13. echo 'is_a('.get_class($this).', '.$sub.') = '.(($this instanceof $sub) ? 'yes' : 'no')."\n";
  14. }
  15. function test() {
  16. echo $this->_is_a('base');
  17. echo $this->_is_a('derived_a');
  18. echo $this->_is_a('derived_b');
  19. echo $this->_is_a('derived_c');
  20. echo $this->_is_a('derived_d');
  21. echo $this->_is_a('if_a');
  22. echo $this->_is_a('if_b');
  23. echo "\n";
  24. }
  25. }
  26. class derived_a extends base implements if_a {
  27. function f_a() {}
  28. }
  29. class derived_b extends base implements if_a, if_b {
  30. function f_a() {}
  31. function f_b() {}
  32. }
  33. class derived_c extends derived_a implements if_b {
  34. function f_b() {}
  35. }
  36. class derived_d extends derived_c {
  37. }
  38. $t = new base();
  39. $t->test();
  40. $t = new derived_a();
  41. $t->test();
  42. $t = new derived_b();
  43. $t->test();
  44. $t = new derived_c();
  45. $t->test();
  46. $t = new derived_d();
  47. $t->test();
  48. ?>
  49. --EXPECT--
  50. is_a(base, base) = yes
  51. is_a(base, derived_a) = no
  52. is_a(base, derived_b) = no
  53. is_a(base, derived_c) = no
  54. is_a(base, derived_d) = no
  55. is_a(base, if_a) = no
  56. is_a(base, if_b) = no
  57. is_a(derived_a, base) = yes
  58. is_a(derived_a, derived_a) = yes
  59. is_a(derived_a, derived_b) = no
  60. is_a(derived_a, derived_c) = no
  61. is_a(derived_a, derived_d) = no
  62. is_a(derived_a, if_a) = yes
  63. is_a(derived_a, if_b) = no
  64. is_a(derived_b, base) = yes
  65. is_a(derived_b, derived_a) = no
  66. is_a(derived_b, derived_b) = yes
  67. is_a(derived_b, derived_c) = no
  68. is_a(derived_b, derived_d) = no
  69. is_a(derived_b, if_a) = yes
  70. is_a(derived_b, if_b) = yes
  71. is_a(derived_c, base) = yes
  72. is_a(derived_c, derived_a) = yes
  73. is_a(derived_c, derived_b) = no
  74. is_a(derived_c, derived_c) = yes
  75. is_a(derived_c, derived_d) = no
  76. is_a(derived_c, if_a) = yes
  77. is_a(derived_c, if_b) = yes
  78. is_a(derived_d, base) = yes
  79. is_a(derived_d, derived_a) = yes
  80. is_a(derived_d, derived_b) = no
  81. is_a(derived_d, derived_c) = yes
  82. is_a(derived_d, derived_d) = yes
  83. is_a(derived_d, if_a) = yes
  84. is_a(derived_d, if_b) = yes