protocolbuffers扩展升级到php7遇到的问题?

发布于 2022-09-03 14:21:07 字数 1945 浏览 17 评论 0

背景

由于项目中正在使用protocolbuffers,整个项目中使用到的扩展基本都已经支持php7,只有protocolbuffers这个还不支持php7,原作者已经停止维护了该扩展,无奈只能自己开始研究如何将protocolbuffers扩展的5.x版本升级到php7。目前该扩展可以通过编译。github

make test结果如下:

Number of tests :  144               144
Tests skipped   :    0 (  0.0%) --------
Tests warned    :    0 (  0.0%) (  0.0%)
Tests failed    :   67 ( 46.5%) ( 46.5%)
Expected fail   :    0 (  0.0%) (  0.0%)
Tests passed    :   77 ( 53.5%) ( 53.5%)

遇到的问题

以下为测试代码:

<?php
require dirname(__FILE__) . DIRECTORY_SEPARATOR . "messages" . DIRECTORY_SEPARATOR . "field_int32.proto.php";

$bytes = file_get_contents(dirname(__FILE__) . DIRECTORY_SEPARATOR . "fixtures" . DIRECTORY_SEPARATOR . "001_int32_init.bin");

$u = new Tutorial_Integer32();
$u->setValue(0);

$obj = ProtocolBuffers::decode("Tutorial_Integer32", $bytes);
var_dump($obj);
if ($obj instanceof Tutorial_Integer32) {
    var_dump($obj->getValue());
    if ($obj->getValue() == 0) {
        echo "OK" . PHP_EOL;
    } else {
        var_dump($obj);
    }
} else {
    var_dump($obj);
}

ini_set("protocolbuffers.native_scalars", 1);
$obj = ProtocolBuffers::decode("Tutorial_Integer32", $bytes);

if ($obj instanceof Tutorial_Integer32) {
    var_dump($obj->getValue());
    if ($obj->getValue() === 0) {
        echo "OK" . PHP_EOL;
    } else {
        var_dump($obj);
    }
} else {
    var_dump($obj);
}

输出结果如下:

object(Tutorial_Integer32)#2 (2) {
  ["_properties":protected]=>
  array(0) {
  }
  ["value":protected]=>
  string(1) "0"
}
NULL
OK
NULL
object(Tutorial_Integer32)#3 (2) {
  ["_properties":protected]=>
  array(0) {
  }
  ["value":protected]=>
  int(0)
}

问题总结:在protocolbuffers::decode时,能够返回被解析的对象,但是对象的属性无法读取。求解中。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故事与诗 2022-09-10 14:21:07

https://www.skiy.net/20170822... 这个哥们上面有php7的分支支持, 你可以看看... 搬运工一枚~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文