dereference_002.phpt 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. --TEST--
  2. Testing array dereference on method calls
  3. --FILE--
  4. <?php
  5. error_reporting(E_ALL);
  6. class foo {
  7. public function bar() {
  8. $x = array();
  9. $x[] = 3;
  10. $x[] = array(1, 5);
  11. $x[] = new foo;
  12. return $x;
  13. }
  14. }
  15. $foo = new foo;
  16. var_dump($x = $foo->bar()[1]);
  17. var_dump($foo->bar()[1][1]);
  18. var_dump($x[0]);
  19. var_dump($x = $foo->bar()[2]);
  20. var_dump($x->bar());
  21. var_dump($x->bar()[0]);
  22. $x = array();
  23. $x[] = new foo;
  24. var_dump($x[0]->bar()[2]);
  25. var_dump($foo->bar()[2]->bar()[1]);
  26. var_dump($foo->bar()[2]->bar()[2]->bar()[1][0]);
  27. var_dump($foo->bar()[2]->bar()[2]->bar()[1][0][1]);
  28. var_dump($foo->bar()[2]->bar()[2]->bar()[4]);
  29. var_dump($foo->bar()[3]->bar());
  30. ?>
  31. --EXPECTF--
  32. array(2) {
  33. [0]=>
  34. int(1)
  35. [1]=>
  36. int(5)
  37. }
  38. int(5)
  39. int(1)
  40. object(foo)#2 (0) {
  41. }
  42. array(3) {
  43. [0]=>
  44. int(3)
  45. [1]=>
  46. array(2) {
  47. [0]=>
  48. int(1)
  49. [1]=>
  50. int(5)
  51. }
  52. [2]=>
  53. object(foo)#3 (0) {
  54. }
  55. }
  56. int(3)
  57. object(foo)#3 (0) {
  58. }
  59. array(2) {
  60. [0]=>
  61. int(1)
  62. [1]=>
  63. int(5)
  64. }
  65. int(1)
  66. Warning: Trying to access array offset on value of type int in %s on line %d
  67. NULL
  68. Warning: Undefined array key 4 in %s on line %d
  69. NULL
  70. Warning: Undefined array key 3 in %s on line %d
  71. Fatal error: Uncaught Error: Call to a member function bar() on null in %s:%d
  72. Stack trace:
  73. #0 {main}
  74. thrown in %s on line %d