1--TEST-- 2unpack of template converter: multiple class/variable: class unpacker (array: object: 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$obj0 = new MyObj(); 64$obj0->pdata = "pubdata0"; 65$obj0->subary[0]->subpdata = "subpubdata00"; 66$subobj01 = new SubObj(); 67$subobj01->subpdata = "subpdata01"; 68$obj0->subary[1] = $subobj01; 69$obj1 = new MyObj(); 70$obj1->pdata = "pubdata1"; 71$obj1->subary[0]->subpdata = "subpubdata1"; 72$subobj11 = new SubObj(); 73$subobj11->subpdata = "subpdata11"; 74$obj1->subary[1] = $subobj11; 75 76$ary = array($obj0, $obj1); 77 78$tpl = array(new MyObj()); 79 80test("recursive object list with object list /w instance", $ary, $tpl, $ary); 81 82--EXPECTF-- 83array(2) { 84 [0]=> 85 object(MyObj)#%d (4) { 86 [%r"?data"?:("MyObj":)?private"?%r]=> 87 string(8) "datadata" 88 [%r"?priv"?:("MyObj":)?private"?%r]=> 89 string(8) "privdata" 90 ["pdata"]=> 91 string(8) "pubdata0" 92 ["subary"]=> 93 array(2) { 94 [0]=> 95 object(SubObj)#%d (3) { 96 [%r"?subdata"?:("SubObj":)?private"?%r]=> 97 string(11) "subdatadata" 98 [%r"?subpriv"?:("SubObj":)?private"?%r]=> 99 string(11) "subprivdata" 100 ["subpdata"]=> 101 string(12) "subpubdata00" 102 } 103 [1]=> 104 object(SubObj)#%d (3) { 105 [%r"?subdata"?:("SubObj":)?private"?%r]=> 106 string(11) "subdatadata" 107 [%r"?subpriv"?:("SubObj":)?private"?%r]=> 108 string(11) "subprivdata" 109 ["subpdata"]=> 110 string(10) "subpdata01" 111 } 112 } 113 } 114 [1]=> 115 object(MyObj)#%d (4) { 116 [%r"?data"?:("MyObj":)?private"?%r]=> 117 string(8) "datadata" 118 [%r"?priv"?:("MyObj":)?private"?%r]=> 119 string(8) "privdata" 120 ["pdata"]=> 121 string(8) "pubdata1" 122 ["subary"]=> 123 array(2) { 124 [0]=> 125 object(SubObj)#%d (3) { 126 [%r"?subdata"?:("SubObj":)?private"?%r]=> 127 string(11) "subdatadata" 128 [%r"?subpriv"?:("SubObj":)?private"?%r]=> 129 string(11) "subprivdata" 130 ["subpdata"]=> 131 string(11) "subpubdata1" 132 } 133 [1]=> 134 object(SubObj)#%d (3) { 135 [%r"?subdata"?:("SubObj":)?private"?%r]=> 136 string(11) "subdatadata" 137 [%r"?subpriv"?:("SubObj":)?private"?%r]=> 138 string(11) "subprivdata" 139 ["subpdata"]=> 140 string(10) "subpdata11" 141 } 142 } 143 } 144} 145OK 146