engine_assignExecutionOrder_002.phpt 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. --TEST--
  2. Evaluation order during assignments.
  3. --FILE--
  4. <?php
  5. // simple case with missing element
  6. $f = array("hello","item2","bye");
  7. list($a,,$b) = $f;
  8. echo "A=$a B=$b\n";
  9. // Warning: Cannot use a scalar value as an array in %s on line %d
  10. try {
  11. $c[$c=1] = 1;
  12. } catch (Error $e) {
  13. echo $e->getMessage(), "\n";
  14. }
  15. // i++ evaluated first, so $d[0] is 10
  16. $d = array(0,10);
  17. $i = 0;
  18. $d[$i++] = $i*10;
  19. // expected array is 10,10
  20. var_dump($d);
  21. // the f++++ makes f into 2, so $e 0 and 1 should both be 30
  22. $e = array(0,0);
  23. $f = 0;
  24. $g1 = array(10,10);
  25. $g2 = array(20,20);
  26. $g3 = array(30,30);
  27. $g = array($g1,$g2,$g3);
  28. list($e[$f++],$e[$f++]) = $g[2];
  29. // expect 30,30
  30. var_dump($e);
  31. $i1 = array(1,2);
  32. $i2 = array(10,20);
  33. $i3 = array(100,200);
  34. $i4 = array(array(1000,2000),3000);
  35. $i = array($i1,$i2,$i3,$i4);
  36. $j = array(0,0,0);
  37. $h = 0;
  38. // a list of lists
  39. list(list($j[$h++],$j[$h++]),$j[$h++]) = $i[3];
  40. var_dump($j);
  41. // list of lists with just variable assignments - expect 100,200,300
  42. $k3 = array(100,200);
  43. $k = array($k3,300);
  44. list(list($l,$m),$n) = $k;
  45. echo "L=$l M=$m N=$n\n";
  46. // expect $x and $y to be null - this fails on php.net 5.2.1 (invalid opcode) - fixed in 5.2.3
  47. list($o,$p) = 20;
  48. echo "O=$o and P=$p\n";
  49. // list of lists with blanks and nulls expect 10 20 40 50 60 70 80
  50. $q1 = array(10,20,30,40);
  51. $q2 = array(50,60);
  52. $q3 = array($q1,$q2,null,70);
  53. $q4 = array($q3,null,80);
  54. list(list(list($r,$s,,$t),list($u,$v),,$w),,$x) = $q4;
  55. echo "$r $s $t $u $v $w $x\n";
  56. // expect y and z to be undefined
  57. list($y,$z) = array();
  58. echo "Y=$y,Z=$z\n";
  59. // expect h to be defined and be 10
  60. list($aa,$bb) = array(10);
  61. echo "AA=$aa\n";
  62. // expect cc and dd to be 10 and 30
  63. list($cc,,$dd) = array(10,20,30,40);
  64. echo "CC=$cc DD=$dd\n";
  65. // expect the inner array to be defined
  66. $ee = array("original array");
  67. function f() {
  68. global $ee;
  69. $ee = array("array created in f()");
  70. return 1;
  71. }
  72. $ee["array entry created after f()"][f()] = "hello";
  73. print_r($ee);
  74. ?>
  75. --EXPECTF--
  76. A=hello B=bye
  77. Cannot use a scalar value as an array
  78. array(2) {
  79. [0]=>
  80. int(10)
  81. [1]=>
  82. int(10)
  83. }
  84. array(2) {
  85. [0]=>
  86. int(30)
  87. [1]=>
  88. int(30)
  89. }
  90. array(3) {
  91. [0]=>
  92. int(1000)
  93. [1]=>
  94. int(2000)
  95. [2]=>
  96. int(3000)
  97. }
  98. L=100 M=200 N=300
  99. O= and P=
  100. 10 20 40 50 60 70 80
  101. Warning: Undefined array key 0 in %s on line %d
  102. Warning: Undefined array key 1 in %s on line %d
  103. Y=,Z=
  104. Warning: Undefined array key 1 in %s on line %d
  105. AA=10
  106. CC=10 DD=30
  107. Array
  108. (
  109. [0] => array created in f()
  110. [array entry created after f()] => Array
  111. (
  112. [1] => hello
  113. )
  114. )