2013-11-22 7 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_packmsgpack_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