|
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