1--TEST-- 2unpack of template converter: multiple class/variable: class unpacker (array: OPT_PHPONLY=false) 3--SKIPIF-- 4<?php 5if (version_compare(PHP_VERSION, '5.2.0') < 0) { 6 echo "skip tests in PHP 5.2 or newer"; 7} 8--FILE-- 9<?php 10if(!extension_loaded('msgpack')) 11{ 12 dl('msgpack.' . PHP_SHLIB_SUFFIX); 13} 14 15//error_reporting(0); 16 17function test($type, $variable, $object, $result = null) 18{ 19 $msgpack = new MessagePack(); 20 $msgpack->setOption(MessagePack::OPT_PHPONLY, false); 21 22 $serialized = $msgpack->pack($variable); 23 24 $unserialized = $msgpack->unpack($serialized, $object); 25 26 var_dump($unserialized); 27 if ($result) 28 { 29 echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; 30 } 31 else 32 { 33 echo 'SKIP', PHP_EOL; 34 } 35} 36 37class MyObj 38{ 39 private $data = null; 40 private $priv = "privdata"; 41 public $pdata = null; 42 public $subary = null; 43 44 function __construct() 45 { 46 $this->data = "datadata"; 47 $this->subary = array(new SubObj()); 48 } 49} 50 51class SubObj 52{ 53 private $subdata = null; 54 private $subpriv = "subprivdata"; 55 public $subpdata = null; 56 57 function __construct() 58 { 59 $this->subdata = "subdatadata"; 60 } 61} 62 63$arySubObj = array( 64 "subdata" => "subdatadata", 65 "subpriv" => "subprivdata", 66 "subpdata" => null, 67); 68 69$aryMyObj = array( 70 "data" => "datadata", 71 "priv" => "privdata", 72 "pdata" => null, 73 "subary" => array($arySubObj), 74); 75 76$obj0 = new MyObj(); 77$obj0->pdata = "pubdata0"; 78$obj0->subary[0]->subpdata = "subpubdata00"; 79$subobj01 = new SubObj(); 80$subobj01->subpdata = "subpdata01"; 81$obj0->subary[1] = $subobj01; 82$obj1 = new MyObj(); 83$obj1->pdata = "pubdata1"; 84$obj1->subary[0]->subpdata = "subpubdata1"; 85$subobj11 = new SubObj(); 86$subobj11->subpdata = "subpdata11"; 87$obj1->subary[1] = $subobj11; 88 89$ary = array($obj0, $obj1); 90 91$tpl = array($aryMyObj); 92$resary = array($aryMyObj, $aryMyObj); 93$resary[0]["pdata"] = "pubdata0"; 94$resary[0]["subary"][] = $arySubObj; 95$resary[0]["subary"][0]["subpdata"] = "subpubdata00"; 96$resary[0]["subary"][1]["subpdata"] = "subpdata01"; 97$resary[1]["subary"][] = $arySubObj; 98$resary[1]["pdata"] = "pubdata1"; 99$resary[1]["subary"][0]["subpdata"] = "subpubdata1"; 100$resary[1]["subary"][1]["subpdata"] = "subpdata11"; 101 102test("recursive object list to associative array list", $ary, $tpl, $resary); 103 104--EXPECTF-- 105array(2) { 106 [0]=> 107 array(4) { 108 ["data"]=> 109 string(8) "datadata" 110 ["priv"]=> 111 string(8) "privdata" 112 ["pdata"]=> 113 string(8) "pubdata0" 114 ["subary"]=> 115 array(2) { 116 [0]=> 117 array(3) { 118 ["subdata"]=> 119 string(11) "subdatadata" 120 ["subpriv"]=> 121 string(11) "subprivdata" 122 ["subpdata"]=> 123 string(12) "subpubdata00" 124 } 125 [1]=> 126 array(3) { 127 ["subdata"]=> 128 string(11) "subdatadata" 129 ["subpriv"]=> 130 string(11) "subprivdata" 131 ["subpdata"]=> 132 string(10) "subpdata01" 133 } 134 } 135 } 136 [1]=> 137 array(4) { 138 ["data"]=> 139 string(8) "datadata" 140 ["priv"]=> 141 string(8) "privdata" 142 ["pdata"]=> 143 string(8) "pubdata1" 144 ["subary"]=> 145 array(2) { 146 [0]=> 147 array(3) { 148 ["subdata"]=> 149 string(11) "subdatadata" 150 ["subpriv"]=> 151 string(11) "subprivdata" 152 ["subpdata"]=> 153 string(11) "subpubdata1" 154 } 155 [1]=> 156 array(3) { 157 ["subdata"]=> 158 string(11) "subdatadata" 159 ["subpriv"]=> 160 string(11) "subprivdata" 161 ["subpdata"]=> 162 string(10) "subpdata11" 163 } 164 } 165 } 166} 167OK 168