1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
--TEST--
list() with keys, evaluation order: nested
--FILE--
<?php
require_once "list_keyed_evaluation_order.inc";
$a = new StringCapable("A");
$c = new StringCapable("C");
$f = new StringCapable("F");
$g = new StringCapable("G");
$i = new StringCapable("I");
$k = new IndexableRetrievable("K", new Indexable([
"A" => "offset value for A",
"C" => new Indexable([
0 => "offset value for 0",
1 => "offset value for 1"
]),
"F" => new Indexable([
"G" => "offset value for G",
"I" => "offset value for I"
])
]));
$store = new Indexable([]);
// list($a => $b, $c => list($d, $e), $f => list($g => $h, $i => $j)) = $k;
// Should be evaluated in the order:
// 1. Evaluate $k
// 2. Evaluate $a
// 3. Evaluate $k[$a]
// 4. Assign $b from $k[$a]
// 5. Evaluate $c
// 6. Evaluate $k[$c]
// 7. Evaluate $k[$c][0]
// 8. Assign $d from $k[$c][0]
// 9. Evaluate $k[$c][1]
// 10. Assign $e from $k[$c][1]
// 11. Evaluate $f
// 12. Evaluate $k[$f]
// 13. Evaluate $g
// 14. Evaluate $k[$f][$g]
// 15. Assign $h from $k[$f][$g]
// 16. Evaluate $i
// 17. Evaluate $k[$f][$i]
// 18. Assign $j from $k[$f][$i]
list(
(string)$a => $store["B"],
(string)$c => list($store["D"], $store["E"]),
(string)$f => list(
(string)$g => $store["H"],
(string)$i => $store["J"]
)
) = $k->getIndexable();
?>
--EXPECT--
Indexable K retrieved.
A evaluated.
Offset A retrieved.
Offset B set to offset value for A.
C evaluated.
Offset C retrieved.
Offset 0 retrieved.
Offset D set to offset value for 0.
Offset 1 retrieved.
Offset E set to offset value for 1.
F evaluated.
Offset F retrieved.
G evaluated.
Offset G retrieved.
Offset H set to offset value for G.
I evaluated.
Offset I retrieved.
Offset J set to offset value for I.
|