2013-11-22 1 views

ответ

2

Они такие же.

Это msgpack_serialize, он вызывает функцию php_msgpack_serialize;

static ZEND_FUNCTION(msgpack_serialize) 
{ 
    zval *parameter; 
    smart_str buf = {0}; 

    if (zend_parse_parameters(
      ZEND_NUM_ARGS() TSRMLS_CC, "z", &parameter) == FAILURE) 
    { 
     return; 
    } 

    php_msgpack_serialize(&buf, parameter TSRMLS_CC); 

    ZVAL_STRINGL(return_value, buf.c, buf.len, 1); 

    smart_str_free(&buf); 
} 

и msgpack_pack это псевдоним msgpack_serialize.

// in msgpack.c 
static zend_function_entry msgpack_functions[] = { 
    ZEND_FE(msgpack_serialize, arginfo_msgpack_serialize) 
    ZEND_FE(msgpack_unserialize, arginfo_msgpack_unserialize) 
    ZEND_FALIAS(msgpack_pack, msgpack_serialize, arginfo_msgpack_serialize) 
    ZEND_FALIAS(msgpack_unpack, msgpack_unserialize, arginfo_msgpack_unserialize) 
    {NULL, NULL, NULL} 
}; 

MessagePack::pack является объектом форма msgpack_serialize. Он также называет php_msgpack_serialize:

static ZEND_METHOD(msgpack, pack) 
{ 
    zval *parameter; 
    smart_str buf = {0}; 
    int php_only = MSGPACK_G(php_only); 
    MSGPACK_BASE_OBJECT; 

    if (zend_parse_parameters(
      ZEND_NUM_ARGS() TSRMLS_CC, "z", &parameter) == FAILURE) 
    { 
     return; 
    } 

    MSGPACK_G(php_only) = base->php_only; 

    php_msgpack_serialize(&buf, parameter TSRMLS_CC); 

    MSGPACK_G(php_only) = php_only; 

    ZVAL_STRINGL(return_value, buf.c, buf.len, 1); 

    smart_str_free(&buf); 
} 
+0

Класс 'MessagePack' имеет дополнительный метод' setOption'. Опция влияет на 'pack'? – sectus

+0

Да, это повлияет на 'pack' и' unpack', вы можете установить его в 'MSGPACK_CLASS_OPT_PHPONLY'. После установки кодированные данные могут передаваться только в php. – srain