summaryrefslogtreecommitdiff
path: root/Zend/tests/list_keyed_evaluation_order_nested.phpt
blob: 8a7725d4eaaaedb76c3283da84ed297b61d41a97 (plain)
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 Stringable("A");
$c = new Stringable("C");
$f = new Stringable("F");
$g = new Stringable("G");
$i = new Stringable("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.