fr47160.phpt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. --TEST--
  2. Calling method from array
  3. --FILE--
  4. <?php
  5. class Hello {
  6. public function world($x) {
  7. echo "Hello, $x\n";return $this;
  8. }
  9. }
  10. class Hello2 {
  11. static public function world($x) {
  12. echo "Hello, $x\n";
  13. }
  14. }
  15. class Magic {
  16. public function __call($f, $a) {
  17. printf("%s called (%s)!\n", __METHOD__, $f);
  18. }
  19. }
  20. class Magic2 {
  21. public static function __callStatic($f, $a) {
  22. printf("%s called (%s)!\n", __METHOD__, $f);
  23. }
  24. }
  25. class Magic3 {
  26. public static function __callStatic($f, $a) {
  27. printf("%s called (%s)!\n", __METHOD__, $f);
  28. }
  29. public function __call($f, $a) {
  30. printf("%s called (%s)!\n", __METHOD__, $f);
  31. }
  32. }
  33. $f = array('Hello','world');
  34. try {
  35. var_dump($f('you'));
  36. } catch (Throwable $e) {
  37. echo "Exception: " . $e->getMessage() . "\n";
  38. }
  39. try {
  40. var_dump(call_user_func($f, 'you'));
  41. } catch (Throwable $e) {
  42. echo "Exception: " . $e->getMessage() . "\n";
  43. }
  44. printf("-----\n");
  45. $h= new Hello;
  46. $f = array($h,'world');
  47. var_dump($f('again'));
  48. var_dump(call_user_func($f, 'again'));
  49. printf("-----\n");
  50. function bar() {
  51. return array(new Hello,'world');
  52. }
  53. $f = bar();
  54. var_dump($f('there'));
  55. var_dump(call_user_func($f, 'there'));
  56. printf("-----\n");
  57. $x = function ($c,$v) { return array($c, $v); };
  58. $c = new Hello;
  59. $m = 'world';
  60. $f = $x($c, $m);
  61. var_dump($f('devs'));
  62. var_dump(call_user_func($f, 'devs'));
  63. printf("-----\n");
  64. $f = array(new Magic, 'foo');
  65. $f();
  66. call_user_func($f);
  67. printf("-----\n");
  68. $f = array('Magic2', 'foo');
  69. $f();
  70. call_user_func($f);
  71. printf("-----\n");
  72. $f = array('Magic3', 'foo');
  73. $f();
  74. call_user_func($f);
  75. printf("-----\n");
  76. $f = array(new Magic3, 'foo');
  77. $f();
  78. call_user_func($f);
  79. printf("-----\n");
  80. $f = array(new Hello2, 'world');
  81. var_dump($f('you'));
  82. var_dump(call_user_func($f, 'you'));
  83. ?>
  84. --EXPECTF--
  85. Deprecated: Non-static method Hello::world() should not be called statically in %s on line %d
  86. Hello, you
  87. Exception: Using $this when not in object context
  88. Deprecated: %son-static method Hello::world() should not be called statically in %s on line %d
  89. Hello, you
  90. Exception: Using $this when not in object context
  91. -----
  92. Hello, again
  93. object(Hello)#%d (0) {
  94. }
  95. Hello, again
  96. object(Hello)#%d (0) {
  97. }
  98. -----
  99. Hello, there
  100. object(Hello)#%d (0) {
  101. }
  102. Hello, there
  103. object(Hello)#%d (0) {
  104. }
  105. -----
  106. Hello, devs
  107. object(Hello)#%d (0) {
  108. }
  109. Hello, devs
  110. object(Hello)#%d (0) {
  111. }
  112. -----
  113. Magic::__call called (foo)!
  114. Magic::__call called (foo)!
  115. -----
  116. Magic2::__callStatic called (foo)!
  117. Magic2::__callStatic called (foo)!
  118. -----
  119. Magic3::__callStatic called (foo)!
  120. Magic3::__callStatic called (foo)!
  121. -----
  122. Magic3::__call called (foo)!
  123. Magic3::__call called (foo)!
  124. -----
  125. Hello, you
  126. NULL
  127. Hello, you
  128. NULL