diff options
Diffstat (limited to 'tests/lang/engine_assignExecutionOrder_002.phpt')
-rw-r--r-- | tests/lang/engine_assignExecutionOrder_002.phpt | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/tests/lang/engine_assignExecutionOrder_002.phpt b/tests/lang/engine_assignExecutionOrder_002.phpt new file mode 100644 index 0000000..ba88150 --- /dev/null +++ b/tests/lang/engine_assignExecutionOrder_002.phpt @@ -0,0 +1,135 @@ +--TEST-- +Evaluation order during assignments. +--FILE-- +<?php + +// simple case with missing element +$f = array("hello","item2","bye"); +list($a,,$b) = $f; +echo "A=$a B=$b\n"; + + +// Warning: Cannot use a scalar value as an array in %s on line %d +$c[$c=1] = 1; + +// i++ evaluated first, so $d[0] is 10 +$d = array(0,10); +$i = 0; +$d[$i++] = $i*10; +// expected array is 10,10 +var_dump($d); + +// the f++++ makes f into 2, so $e 0 and 1 should both be 30 +$e = array(0,0); +$f = 0; +$g1 = array(10,10); +$g2 = array(20,20); +$g3 = array(30,30); +$g = array($g1,$g2,$g3); +list($e[$f++],$e[$f++]) = $g[$f]; +// expect 30,30 +var_dump($e); + + +$i1 = array(1,2); +$i2 = array(10,20); +$i3 = array(100,200); +$i4 = array(array(1000,2000),3000); +$i = array($i1,$i2,$i3,$i4); +$j = array(0,0,0); +$h = 0; +// a list of lists +list(list($j[$h++],$j[$h++]),$j[$h++]) = $i[$h]; +var_dump($j); + + +// list of lists with just variable assignments - expect 100,200,300 +$k3 = array(100,200); +$k = array($k3,300); +list(list($l,$m),$n) = $k; +echo "L=$l M=$m N=$n\n"; + + +// expect $x and $y to be null - this fails on php.net 5.2.1 (invalid opcode) - fixed in 5.2.3 +list($o,$p) = 20; +echo "O=$o and P=$p\n"; + + +// list of lists with blanks and nulls expect 10 20 40 50 60 70 80 +$q1 = array(10,20,30,40); +$q2 = array(50,60); +$q3 = array($q1,$q2,null,70); +$q4 = array($q3,null,80); + +list(list(list($r,$s,,$t),list($u,$v),,$w),,$x) = $q4; +echo "$r $s $t $u $v $w $x\n"; + + +// expect y and z to be undefined +list($y,$z) = array(); +echo "Y=$y,Z=$z\n"; + +// expect h to be defined and be 10 +list($aa,$bb) = array(10); +echo "AA=$aa\n"; + +// expect cc and dd to be 10 and 30 +list($cc,,$dd) = array(10,20,30,40); +echo "CC=$cc DD=$dd\n"; + +// expect the inner array to be defined +$ee = array("original array"); +function f() { + global $ee; + $ee = array("array created in f()"); + return 1; +} +$ee["array entry created after f()"][f()] = "hello"; +print_r($ee); + +?> +--EXPECTF-- +A=hello B=bye + +Warning: Cannot use a scalar value as an array in %s on line %d +array(2) { + [0]=> + int(10) + [1]=> + int(10) +} +array(2) { + [0]=> + int(30) + [1]=> + int(30) +} +array(3) { + [0]=> + int(1000) + [1]=> + int(2000) + [2]=> + int(3000) +} +L=100 M=200 N=300 +O= and P= +10 20 40 50 60 70 80 + +Notice: Undefined offset: 1 in %s on line %d + +Notice: Undefined offset: 0 in %s on line %d +Y=,Z= + +Notice: Undefined offset: 1 in %s on line %d +AA=10 +CC=10 DD=30 +Array +( + [0] => array created in f() + [array entry created after f()] => Array + ( + [1] => hello + ) + +) |