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