engine_assignExecutionOrder_008.phpt 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. --TEST--
  2. Ensure by value assignments leave temporaries on the stack, for all sorts of assignees.
  3. --FILE--
  4. <?php
  5. function f() { return 0; }
  6. $a[0][1] = 'good';
  7. $a[1][1] = 'bad';
  8. echo "\n" . '$i=f(): ';
  9. echo $a[$i=f()][++$i];
  10. unset($i);
  11. echo "\n" . '$$x=f(): ';
  12. $x='i';
  13. echo $a[$$x=f()][++$$x];
  14. unset($i, $x);
  15. echo "\n" . '${\'i\'}=f(): ';
  16. echo $a[${'i'}=f()][++${'i'}];
  17. unset(${'i'});
  18. echo "\n" . '$i[0]=f(): ';
  19. echo $a[$i[0]=f()][++$i[0]];
  20. unset($i);
  21. echo "\n" . '$i[0][0]=f(): ';
  22. echo $a[$i[0][0]=f()][++$i[0][0]];
  23. unset($i);
  24. echo "\n" . '$i->p=f(): ';
  25. $i = new stdClass;
  26. echo $a[$i->p=f()][++$i->p];
  27. unset($i);
  28. echo "\n" . '$i->p->q=f(): ';
  29. $i = new stdClass;
  30. $i->p = new stdClass;
  31. echo $a[$i->p->q=f()][++$i->p->q];
  32. unset($i);
  33. echo "\n" . '$i->p[0]=f(): ';
  34. $i = new stdClass;
  35. echo $a[$i->p[0]=f()][++$i->p[0]];
  36. unset($i);
  37. echo "\n" . '$i->p[0]->p=f(): ';
  38. $i = new stdClass;
  39. $i->p[0] = new stdClass;
  40. echo $a[$i->p[0]->p=f()][++$i->p[0]->p];
  41. unset($i);
  42. Class C {
  43. static $p;
  44. }
  45. echo "\n" . 'C::$p=f(): ';
  46. echo $a[C::$p=f()][++C::$p];
  47. echo "\n" . 'C::$p[0]=f(): ';
  48. C::$p = array();
  49. echo $a[C::$p[0]=f()][++C::$p[0]];
  50. echo "\n" . 'C::$p->q=f(): ';
  51. C::$p = new stdclass;
  52. echo $a[C::$p->q=f()][++C::$p->q];
  53. ?>
  54. --EXPECT--
  55. $i=f(): good
  56. $$x=f(): good
  57. ${'i'}=f(): good
  58. $i[0]=f(): good
  59. $i[0][0]=f(): good
  60. $i->p=f(): good
  61. $i->p->q=f(): good
  62. $i->p[0]=f(): good
  63. $i->p[0]->p=f(): good
  64. C::$p=f(): good
  65. C::$p[0]=f(): good
  66. C::$p->q=f(): good