|
31 | 31 | /* PHP Core stuff */ |
32 | 32 | #include <php.h> |
33 | 33 | #include <php_ini.h> |
| 34 | +#include <ext/json/php_json.h> |
| 35 | +#include <ext/standard/base64.h> |
34 | 36 | #include <ext/standard/info.h> |
35 | 37 | #include <Zend/zend_interfaces.h> |
36 | 38 | #include <ext/spl/spl_iterators.h> |
@@ -187,6 +189,42 @@ PHP_METHOD(Binary, getType) |
187 | 189 | } |
188 | 190 | /* }}} */ |
189 | 191 |
|
| 192 | +/* {{{ proto array Binary::jsonSerialize() |
| 193 | +*/ |
| 194 | +PHP_METHOD(Binary, jsonSerialize) |
| 195 | +{ |
| 196 | + php_phongo_binary_t *intern; |
| 197 | + char type[3]; |
| 198 | + int type_len; |
| 199 | + |
| 200 | + if (zend_parse_parameters_none() == FAILURE) { |
| 201 | + return; |
| 202 | + } |
| 203 | + |
| 204 | + intern = Z_BINARY_OBJ_P(getThis()); |
| 205 | + |
| 206 | + array_init_size(return_value, 2); |
| 207 | + |
| 208 | +#if PHP_VERSION_ID >= 70000 |
| 209 | + { |
| 210 | + zend_string *data = php_base64_encode((unsigned char *)intern->data, intern->data_len); |
| 211 | + ADD_ASSOC_STRINGL(return_value, "$binary", ZSTR_VAL(data), ZSTR_LEN(data)); |
| 212 | + zend_string_free(data); |
| 213 | + } |
| 214 | +#else |
| 215 | + { |
| 216 | + int data_len = 0; |
| 217 | + unsigned char *data = php_base64_encode((unsigned char *)intern->data, intern->data_len, &data_len); |
| 218 | + ADD_ASSOC_STRINGL(return_value, "$binary", (char *)data, data_len); |
| 219 | + efree(data); |
| 220 | + } |
| 221 | +#endif |
| 222 | + |
| 223 | + type_len = snprintf(type, sizeof(type), "%02x", intern->type); |
| 224 | + ADD_ASSOC_STRINGL(return_value, "$type", type, type_len); |
| 225 | +} |
| 226 | +/* }}} */ |
| 227 | + |
190 | 228 | /* {{{ proto string Binary::serialize() |
191 | 229 | */ |
192 | 230 | PHP_METHOD(Binary, serialize) |
@@ -299,6 +337,7 @@ static zend_function_entry php_phongo_binary_me[] = { |
299 | 337 | PHP_ME(Binary, __construct, ai_Binary___construct, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) |
300 | 338 | PHP_ME(Binary, __set_state, ai_Binary___set_state, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) |
301 | 339 | PHP_ME(Binary, __toString, ai_Binary_void, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) |
| 340 | + PHP_ME(Binary, jsonSerialize, ai_Binary_void, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) |
302 | 341 | PHP_ME(Binary, serialize, ai_Binary_void, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) |
303 | 342 | PHP_ME(Binary, unserialize, ai_Binary_unserialize, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) |
304 | 343 | PHP_ME(Binary, getData, ai_Binary_void, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) |
@@ -399,6 +438,7 @@ PHP_MINIT_FUNCTION(Binary) |
399 | 438 | php_phongo_binary_ce->create_object = php_phongo_binary_create_object; |
400 | 439 | PHONGO_CE_FINAL(php_phongo_binary_ce); |
401 | 440 |
|
| 441 | + zend_class_implements(php_phongo_binary_ce TSRMLS_CC, 1, php_json_serializable_ce); |
402 | 442 | zend_class_implements(php_phongo_binary_ce TSRMLS_CC, 1, php_phongo_type_ce); |
403 | 443 | zend_class_implements(php_phongo_binary_ce TSRMLS_CC, 1, zend_ce_serializable); |
404 | 444 |
|
|
0 commit comments