1--TEST-- 2Dumping object with property hooks 3--FILE-- 4<?php 5 6class Test { 7 public $addedHooks = 'addedHooks'; 8 public $virtual { 9 get { return strtoupper('virtual'); } 10 } 11 public $backed = 'backed' { 12 get { return strtoupper($this->backed); } 13 set { $this->backed = $value; } 14 } 15 public $writeOnly { 16 set {} 17 } 18 private $private = 'private' { 19 get { return strtoupper($this->private); } 20 set { $this->private = $value; } 21 } 22 private $changed = 'changed Test' { 23 get { return strtoupper($this->changed); } 24 } 25 public function dumpTest() { 26 var_dump($this); 27 var_dump(get_object_vars($this)); 28 var_dump(get_mangled_object_vars($this)); 29 var_export($this); 30 echo "\n"; 31 echo json_encode($this), "\n"; 32 var_dump((array) $this); 33 } 34} 35 36class Child extends Test { 37 public $addedHooks { 38 get { return strtoupper(parent::$addedHooks::get()); } 39 } 40 private $changed = 'changed Child' { 41 get { return strtoupper($this->changed); } 42 } 43 public function dumpChild() { 44 var_dump($this); 45 var_dump(get_object_vars($this)); 46 var_export($this); 47 echo "\n"; 48 echo json_encode($this), "\n"; 49 var_dump((array) $this); 50 } 51} 52 53function dump($test) { 54 var_dump($test); 55 var_dump(get_object_vars($test)); 56 var_export($test); 57 echo "\n"; 58 echo json_encode($test), "\n"; 59 var_dump((array) $test); 60} 61 62dump(new Test); 63dump(new Child); 64(new Child)->dumpTest(); 65(new Child)->dumpChild(); 66 67?> 68--EXPECTF-- 69object(Test)#%d (4) { 70 ["addedHooks"]=> 71 string(10) "addedHooks" 72 ["backed"]=> 73 string(6) "backed" 74 ["private":"Test":private]=> 75 string(7) "private" 76 ["changed":"Test":private]=> 77 string(12) "changed Test" 78} 79array(3) { 80 ["addedHooks"]=> 81 string(10) "addedHooks" 82 ["virtual"]=> 83 string(7) "VIRTUAL" 84 ["backed"]=> 85 string(6) "BACKED" 86} 87\Test::__set_state(array( 88 'addedHooks' => 'addedHooks', 89 'virtual' => 'VIRTUAL', 90 'backed' => 'BACKED', 91 'private' => 'PRIVATE', 92 'changed' => 'CHANGED TEST', 93)) 94{"addedHooks":"addedHooks","virtual":"VIRTUAL","backed":"BACKED"} 95array(4) { 96 ["addedHooks"]=> 97 string(10) "addedHooks" 98 ["backed"]=> 99 string(6) "backed" 100 ["%0Test%0private"]=> 101 string(7) "private" 102 ["%0Test%0changed"]=> 103 string(12) "changed Test" 104} 105object(Child)#%d (5) { 106 ["addedHooks"]=> 107 string(10) "addedHooks" 108 ["backed"]=> 109 string(6) "backed" 110 ["private":"Test":private]=> 111 string(7) "private" 112 ["changed":"Test":private]=> 113 string(12) "changed Test" 114 ["changed":"Child":private]=> 115 string(13) "changed Child" 116} 117array(3) { 118 ["addedHooks"]=> 119 string(10) "ADDEDHOOKS" 120 ["virtual"]=> 121 string(7) "VIRTUAL" 122 ["backed"]=> 123 string(6) "BACKED" 124} 125\Child::__set_state(array( 126 'addedHooks' => 'ADDEDHOOKS', 127 'changed' => 'CHANGED CHILD', 128 'virtual' => 'VIRTUAL', 129 'backed' => 'BACKED', 130 'private' => 'PRIVATE', 131 'changed' => 'changed Child', 132)) 133{"addedHooks":"ADDEDHOOKS","virtual":"VIRTUAL","backed":"BACKED"} 134array(5) { 135 ["addedHooks"]=> 136 string(10) "addedHooks" 137 ["backed"]=> 138 string(6) "backed" 139 ["%0Test%0private"]=> 140 string(7) "private" 141 ["%0Test%0changed"]=> 142 string(12) "changed Test" 143 ["%0Child%0changed"]=> 144 string(13) "changed Child" 145} 146object(Child)#%d (5) { 147 ["addedHooks"]=> 148 string(10) "addedHooks" 149 ["backed"]=> 150 string(6) "backed" 151 ["private":"Test":private]=> 152 string(7) "private" 153 ["changed":"Test":private]=> 154 string(12) "changed Test" 155 ["changed":"Child":private]=> 156 string(13) "changed Child" 157} 158array(4) { 159 ["addedHooks"]=> 160 string(10) "ADDEDHOOKS" 161 ["virtual"]=> 162 string(7) "VIRTUAL" 163 ["backed"]=> 164 string(6) "BACKED" 165 ["private"]=> 166 string(7) "PRIVATE" 167} 168array(5) { 169 ["addedHooks"]=> 170 string(10) "addedHooks" 171 ["backed"]=> 172 string(6) "backed" 173 ["%0Test%0private"]=> 174 string(7) "private" 175 ["%0Test%0changed"]=> 176 string(12) "changed Test" 177 ["%0Child%0changed"]=> 178 string(13) "changed Child" 179} 180\Child::__set_state(array( 181 'addedHooks' => 'ADDEDHOOKS', 182 'changed' => 'CHANGED CHILD', 183 'virtual' => 'VIRTUAL', 184 'backed' => 'BACKED', 185 'private' => 'PRIVATE', 186 'changed' => 'changed Child', 187)) 188{"addedHooks":"ADDEDHOOKS","virtual":"VIRTUAL","backed":"BACKED"} 189array(5) { 190 ["addedHooks"]=> 191 string(10) "addedHooks" 192 ["backed"]=> 193 string(6) "backed" 194 ["%0Test%0private"]=> 195 string(7) "private" 196 ["%0Test%0changed"]=> 197 string(12) "changed Test" 198 ["%0Child%0changed"]=> 199 string(13) "changed Child" 200} 201object(Child)#%d (5) { 202 ["addedHooks"]=> 203 string(10) "addedHooks" 204 ["backed"]=> 205 string(6) "backed" 206 ["private":"Test":private]=> 207 string(7) "private" 208 ["changed":"Test":private]=> 209 string(12) "changed Test" 210 ["changed":"Child":private]=> 211 string(13) "changed Child" 212} 213array(5) { 214 ["addedHooks"]=> 215 string(10) "ADDEDHOOKS" 216 ["changed"]=> 217 string(13) "CHANGED CHILD" 218 ["virtual"]=> 219 string(7) "VIRTUAL" 220 ["backed"]=> 221 string(6) "BACKED" 222 ["changed"]=> 223 string(13) "changed Child" 224} 225\Child::__set_state(array( 226 'addedHooks' => 'ADDEDHOOKS', 227 'changed' => 'CHANGED CHILD', 228 'virtual' => 'VIRTUAL', 229 'backed' => 'BACKED', 230 'private' => 'PRIVATE', 231 'changed' => 'changed Child', 232)) 233{"addedHooks":"ADDEDHOOKS","virtual":"VIRTUAL","backed":"BACKED"} 234array(5) { 235 ["addedHooks"]=> 236 string(10) "addedHooks" 237 ["backed"]=> 238 string(6) "backed" 239 ["%0Test%0private"]=> 240 string(7) "private" 241 ["%0Test%0changed"]=> 242 string(12) "changed Test" 243 ["%0Child%0changed"]=> 244 string(13) "changed Child" 245} 246