@@ -124,11 +124,12 @@ final protected static function valueToJsonData($value, $flags = 0, $objParents
124124 * Return value from json decoded data
125125 *
126126 * @param mixed $value json decoded data
127+ * @param int $flags flags bitmask
127128 * @param ?JsonUnserializeMap $map unserialize map
128129 *
129130 * @return mixed
130131 */
131- final protected static function jsonDataToValue ($ value , $ map = null )
132+ final protected static function jsonDataToValue ($ value , $ flags = 0 , $ map = null )
132133 {
133134 if ($ map !== null ) {
134135 $ current = $ map ->getCurrent ();
@@ -144,15 +145,15 @@ final protected static function jsonDataToValue($value, $map = null)
144145 $ result = [];
145146 foreach ($ mappedVal as $ key => $ arrayVal ) {
146147 $ map ->setCurrent ($ key , $ current );
147- $ result [$ key ] = self ::jsonDataToValue ($ arrayVal , $ map );
148+ $ result [$ key ] = self ::jsonDataToValue ($ arrayVal , $ flags , $ map );
148149 };
149150 return $ result ;
150151 case 'object ' :
151152 /** @var object $mappedVal */
152153 if (!is_array ($ value )) {
153154 $ value = [];
154155 }
155- return self ::fillObjFromValue ($ value , $ mappedVal , $ map );
156+ return self ::fillObjFromValue ($ value , $ mappedVal , $ flags , $ map );
156157 default :
157158 return $ mappedVal ;
158159 }
@@ -168,10 +169,10 @@ final protected static function jsonDataToValue($value, $map = null)
168169 if ($ map !== null ) {
169170 $ map ->setCurrent ($ key , $ current );
170171 }
171- $ result [$ key ] = self ::jsonDataToValue ($ arrayVal , $ map );
172+ $ result [$ key ] = self ::jsonDataToValue ($ arrayVal , $ flags , $ map );
172173 }
173174 } else {
174- $ result = self ::fillObjFromValue ($ value , self ::getObjFromClass ($ newClassName ), $ map );
175+ $ result = self ::fillObjFromValue ($ value , self ::getObjFromClass ($ newClassName ), $ flags , $ map );
175176 }
176177 return $ result ;
177178 case 'boolean ' :
@@ -208,11 +209,12 @@ final public static function getObjFromClass($class)
208209 *
209210 * @param mixed[] $value value from json data
210211 * @param object $obj object to fill with json data
212+ * @param int $flags flags bitmask
211213 * @param ?JsonUnserializeMap $map unserialize map
212214 *
213215 * @return object
214216 */
215- final protected static function fillObjFromValue ($ value , $ obj , $ map = null )
217+ final protected static function fillObjFromValue ($ value , $ obj , $ flags = 0 , $ map = null )
216218 {
217219 if ($ map !== null ) {
218220 $ current = $ map ->getCurrent ();
@@ -227,10 +229,11 @@ final protected static function fillObjFromValue($value, $obj, $map = null)
227229 if ($ map !== null ) {
228230 $ map ->setCurrent ($ arrayProp , $ current );
229231 }
230- $ obj ->{$ arrayProp } = self ::jsonDataToValue ($ arrayValue , $ map );
232+ $ obj ->{$ arrayProp } = self ::jsonDataToValue ($ arrayValue , $ flags , $ map );
231233 }
232234 } else {
233- if (method_exists ($ obj , '__unserialize ' )) {
235+ $ skipMagicMethods = ($ flags & self ::JSON_SKIP_MAGIC_METHODS );
236+ if (!$ skipMagicMethods && method_exists ($ obj , '__unserialize ' )) {
234237 $ obj ->__unserialize ($ value );
235238 } else {
236239 $ reflect = new ReflectionObject ($ obj );
@@ -246,10 +249,10 @@ final protected static function fillObjFromValue($value, $obj, $map = null)
246249 if (!array_key_exists ($ propName , $ value ) || $ prop ->isStatic ()) {
247250 continue ;
248251 }
249- $ prop ->setValue ($ obj , self ::jsonDataToValue ($ value [$ propName ], $ map ));
252+ $ prop ->setValue ($ obj , self ::jsonDataToValue ($ value [$ propName ], $ flags , $ map ));
250253 }
251254
252- if (method_exists ($ obj , '__wakeup ' )) {
255+ if (! $ skipMagicMethods && method_exists ($ obj , '__wakeup ' )) {
253256 $ obj ->__wakeup ();
254257 }
255258 }
0 commit comments