@@ -127,30 +127,31 @@ public function setData($data = array())
127
127
// but doesn't provide the JsonSerializable interface.
128
128
set_error_handler (function () { return false ; });
129
129
$ data = @json_encode ($ data , $ this ->encodingOptions );
130
- } else {
130
+ restore_error_handler ();
131
+ } elseif (\PHP_VERSION_ID < 50500 ) {
131
132
// PHP 5.4 and up wrap exceptions thrown by JsonSerializable
132
133
// objects in a new exception that needs to be removed.
133
134
// Fortunately, PHP 5.5 and up do not trigger any warning anymore.
134
- if (\ PHP_VERSION_ID < 50500 ) {
135
- // Clear json_last_error()
136
- json_encode ( null );
137
- $ errorHandler = set_error_handler ( ' var_dump ' );
138
- restore_error_handler ();
139
- set_error_handler ( function () use ( $ errorHandler ) {
140
- if ( JSON_ERROR_NONE === json_last_error ()) {
141
- return $ errorHandler && false !== call_user_func_array ( $ errorHandler , func_get_args ());
142
- }
143
- } );
144
- }
145
-
135
+ // Clear json_last_error()
136
+ json_encode ( null );
137
+ $ errorHandler = set_error_handler ( ' var_dump ' );
138
+ restore_error_handler ( );
139
+ set_error_handler ( function () use ( $ errorHandler ) {
140
+ if ( JSON_ERROR_NONE === json_last_error () ) {
141
+ return $ errorHandler && false !== call_user_func_array ( $ errorHandler , func_get_args ());
142
+ }
143
+ });
144
+ $ data = json_encode ( $ data , $ this -> encodingOptions );
145
+ restore_error_handler ();
146
+ } else {
146
147
$ data = json_encode ($ data , $ this ->encodingOptions );
147
148
}
148
-
149
- if (\PHP_VERSION_ID < 50500 ) {
149
+ } catch ( \ Error $ e ) {
150
+ if (\PHP_VERSION_ID < 50500 || ! interface_exists ( ' JsonSerializable ' , false ) ) {
150
151
restore_error_handler ();
151
152
}
152
153
} catch (\Exception $ e ) {
153
- if (\PHP_VERSION_ID < 50500 ) {
154
+ if (\PHP_VERSION_ID < 50500 || ! interface_exists ( ' JsonSerializable ' , false ) ) {
154
155
restore_error_handler ();
155
156
}
156
157
if (interface_exists ('JsonSerializable ' , false ) && 'Exception ' === get_class ($ e ) && 0 === strpos ($ e ->getMessage (), 'Failed calling ' )) {
0 commit comments