1--TEST-- 2Cyclic array test 3--INI-- 4--SKIPIF-- 5<?php 6 7if (version_compare(PHP_VERSION, "8.0.0dev", "<")) { 8 die("skip PHP < 8.0"); 9} 10?> 11--FILE-- 12<?php 13if(!extension_loaded('msgpack')) { 14 dl('msgpack.' . PHP_SHLIB_SUFFIX); 15} 16 17function test($type, $variable, $test) { 18 $serialized = msgpack_serialize($variable); 19 $unserialized = msgpack_unserialize($serialized); 20 21 echo $type, PHP_EOL; 22 echo bin2hex($serialized), PHP_EOL; 23 var_dump($unserialized); 24 echo $test || $unserialized == $variable ? 'OK' : 'ERROR', PHP_EOL; 25} 26 27$a = array( 28 'a' => array( 29 'b' => 'c', 30 'd' => 'e' 31 ), 32); 33 34$a['f'] = &$a; 35 36test('array', $a, true); 37 38$a = array("foo" => &$b); 39$b = array(1, 2, $a); 40var_dump($a); 41var_dump($k = msgpack_unserialize(msgpack_serialize($a))); 42 43$k["foo"][1] = "b"; 44var_dump($k); 45?> 46--EXPECT-- 47array 4882a16182a162a163a164a165a16683c001a16182a162a163a164a165a16682c0020003 49array(2) { 50 ["a"]=> 51 array(2) { 52 ["b"]=> 53 string(1) "c" 54 ["d"]=> 55 string(1) "e" 56 } 57 ["f"]=> 58 &array(2) { 59 ["a"]=> 60 array(2) { 61 ["b"]=> 62 string(1) "c" 63 ["d"]=> 64 string(1) "e" 65 } 66 ["f"]=> 67 *RECURSION* 68 } 69} 70OK 71array(1) { 72 ["foo"]=> 73 &array(3) { 74 [0]=> 75 int(1) 76 [1]=> 77 int(2) 78 [2]=> 79 *RECURSION* 80 } 81} 82array(1) { 83 ["foo"]=> 84 &array(3) { 85 [0]=> 86 int(1) 87 [1]=> 88 int(2) 89 [2]=> 90 array(1) { 91 ["foo"]=> 92 *RECURSION* 93 } 94 } 95} 96array(1) { 97 ["foo"]=> 98 &array(3) { 99 [0]=> 100 int(1) 101 [1]=> 102 string(1) "b" 103 [2]=> 104 array(1) { 105 ["foo"]=> 106 *RECURSION* 107 } 108 } 109} 110