interface_implemented.phpt 2.1 KB

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