dereference_002.phpt 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. NULL
  67. Notice: Undefined offset: 4 in %s on line %d
  68. NULL
  69. Notice: Undefined offset: 3 in %s on line %d
  70. Fatal error: Uncaught Error: Call to a member function bar() on null in %s:%d
  71. Stack trace:
  72. #0 {main}
  73. thrown in %s on line %d