首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >msgpack_pack和msgpack_serialize以及MessagePack::pack之间有什么区别?

msgpack_pack和msgpack_serialize以及MessagePack::pack之间有什么区别?
EN

Stack Overflow用户
提问于 2013-11-22 08:23:16
回答 1查看 2.2K关注 0票数 1

msgpack通过msgpack扩展在php中实现。

有两个函数msgpack_packmsgpack_serialize以及方法MessagePack::pack。我不知道他们之间有什么区别。如何找到这个扩展的API?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 08:39:46

他们是一样的。

这是msgpack_serialize,它调用函数php_msgpack_serialize

代码语言:javascript
复制
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的别名。

代码语言:javascript
复制
// 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::packmsgpack_serialize的对象形式。它也叫php_msgpack_serialize

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20140169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档