1

msgpack extensionによって php に実装されたmsgpack 。

関数 と メソッド の 2 つがmsgpack_packありmsgpack_serializeますMessagePack::pack。それらの違いは何なのかわかりません。この拡張機能の API を見つけるには?

4

1 に答える 1

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);
}
于 2013-11-22T08:39:46.813 に答える