engine_assignExecutionOrder_001.phpt 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. --TEST--
  2. Evaluation order during assignments.
  3. --FILE--
  4. <?php
  5. function f() {
  6. echo "in f()\n";
  7. return "name";
  8. }
  9. function g() {
  10. echo "in g()\n";
  11. return "assigned value";
  12. }
  13. echo "\n\nOrder with local assignment:\n";
  14. ${f()} = g();
  15. var_dump($name);
  16. echo "\n\nOrder with array assignment:\n";
  17. $a[f()] = g();
  18. var_dump($a);
  19. echo "\n\nOrder with object property assignment:\n";
  20. $oa = new stdClass;
  21. $oa->${f()} = g();
  22. var_dump($oa);
  23. echo "\n\nOrder with nested object property assignment:\n";
  24. $ob = new stdClass;
  25. $ob->o1 = new stdClass;
  26. $ob->o1->o2 = new stdClass;
  27. $ob->o1->o2->${f()} = g();
  28. var_dump($ob);
  29. echo "\n\nOrder with dim_list property assignment:\n";
  30. $oc = new stdClass;
  31. $oc->a[${f()}] = g();
  32. var_dump($oc);
  33. class C {
  34. public static $name = "original";
  35. public static $a = array();
  36. public static $string = "hello";
  37. }
  38. echo "\n\nOrder with static property assignment:\n";
  39. C::${f()} = g();
  40. var_dump(C::$name);
  41. echo "\n\nOrder with static array property assignment:\n";
  42. C::$a[f()] = g();
  43. var_dump(C::$a);
  44. echo "\n\nOrder with indexed string assignment:\n";
  45. $string = "hello";
  46. function getOffset() {
  47. echo "in getOffset()\n";
  48. return 0;
  49. }
  50. function newChar() {
  51. echo "in newChar()\n";
  52. return 'j';
  53. }
  54. $string[getOffset()] = newChar();
  55. var_dump($string);
  56. echo "\n\nOrder with static string property assignment:\n";
  57. C::$string[getOffset()] = newChar();
  58. var_dump(C::$string);
  59. ?>
  60. --EXPECTF--
  61. Order with local assignment:
  62. in f()
  63. in g()
  64. string(14) "assigned value"
  65. Order with array assignment:
  66. in f()
  67. in g()
  68. array(1) {
  69. ["name"]=>
  70. string(14) "assigned value"
  71. }
  72. Order with object property assignment:
  73. in f()
  74. in g()
  75. object(stdClass)#%d (1) {
  76. ["assigned value"]=>
  77. string(14) "assigned value"
  78. }
  79. Order with nested object property assignment:
  80. in f()
  81. in g()
  82. object(stdClass)#%d (1) {
  83. ["o1"]=>
  84. object(stdClass)#%d (1) {
  85. ["o2"]=>
  86. object(stdClass)#%d (1) {
  87. ["assigned value"]=>
  88. string(14) "assigned value"
  89. }
  90. }
  91. }
  92. Order with dim_list property assignment:
  93. in f()
  94. in g()
  95. object(stdClass)#%d (1) {
  96. ["a"]=>
  97. array(1) {
  98. ["assigned value"]=>
  99. string(14) "assigned value"
  100. }
  101. }
  102. Order with static property assignment:
  103. in f()
  104. in g()
  105. string(14) "assigned value"
  106. Order with static array property assignment:
  107. in f()
  108. in g()
  109. array(1) {
  110. ["name"]=>
  111. string(14) "assigned value"
  112. }
  113. Order with indexed string assignment:
  114. in getOffset()
  115. in newChar()
  116. string(5) "jello"
  117. Order with static string property assignment:
  118. in getOffset()
  119. in newChar()
  120. string(5) "jello"