protocolbuffers扩展升级到php7遇到的问题?
背景
由于项目中正在使用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
https://www.skiy.net/20170822... 这个哥们上面有php7的分支支持, 你可以看看... 搬运工一枚~