PHP中的getter/setter与节俭?
我无法使用Thrift生成的Types.php的getter和setterPHP中的getter/setter与节俭?,php,thrift,Php,Thrift,我无法使用Thrift生成的Types.php的getter和setter class Creation { static $_TSPEC; public $a_iso = null; public $date = null; public function __construct($vals=null) { if (!isset(self::$_TSPEC)) {
class Creation {
static $_TSPEC;
public $a_iso = null;
public $date = null;
public function __construct($vals=null) {
if (!isset(self::$_TSPEC)) {
self::$_TSPEC = array(
1 => array(
'var' => 'a_iso',
'type' => TType::I32,
),
2 => array(
'var' => 'date',
'type' => TType::I32,
),
);
}
if (is_array($vals)) {
if (isset($vals['a_iso'])) {
$this->a_iso = $vals['a_iso'];
}
if (isset($vals['date'])) {
$this->date = $vals['date'];
}
}
}
public function read($input)
{
$xfer = 0;
$fname = null;
$ftype = 0;
$fid = 0;
$xfer += $input->readStructBegin($fname);
while (true)
{
$xfer += $input->readFieldBegin($fname, $ftype, $fid);
if ($ftype == TType::STOP) {
break;
}
switch ($fid)
{
case 1:
if ($ftype == TType::I32) {
$xfer += $input->readI32($this->a_iso);
} else {
$xfer += $input->skip($ftype);
}
break;
case 2:
if ($ftype == TType::I32) {
$xfer += $input->readI32($this->date);
} else {
$xfer += $input->skip($ftype);
}
break;
default:
$xfer += $input->skip($ftype);
break;
}
$xfer += $input->readFieldEnd();
}
$xfer += $input->readStructEnd();
return $xfer;
}
public function write($output) {
$xfer = 0;
$xfer += $output->writeStructBegin('Creation');
if ($this->a_iso !== null) {
$xfer += $output->writeFieldBegin('a_iso', TType::I32, 1);
$xfer += $output->writeI32($this->a_iso);
$xfer += $output->writeFieldEnd();
}
if ($this->date !== null) {
$xfer += $output->writeFieldBegin('date', TType::I32, 2);
$xfer += $output->writeI32($this->date);
$xfer += $output->writeFieldEnd();
}
$xfer += $output->writeFieldStop();
$xfer += $output->writeStructEnd();
return $xfer;
}
}
我做到了:
$objetcree = new Creation();
$objetcree->a_iso = 45;
好的,但我不想这样使用
$objetcree->read($input);
如果我只想写a_iso字段,那么$input必须是多少
我的节俭结构:
typedef i32 int
struct Creation {
1: int a_iso,
2: int date
}
谢谢大家!
Input
应该是从输入流传递数据的TProtocol
的实例
当您只想在对象实例上设置一个简单的值时,除非您有这样的输入流,否则使用read()
是没有意义的。其他一切都将是大功告成
好的,但我不想这样使用
但是,它是这样工作的。你不必真的喜欢它
如果我只想写a_iso字段,那么$input必须是多少
为了完整起见:格式主要取决于您要使用的协议。您可以使用二进制、JSON和一系列其他格式。根据传输情况,可能需要更多的数据。但同样,这种方式没有意义,除非你没有讲述你为什么要以如此复杂的方式做这件事的全部原因
我有很多xml文件。我想可持续地储存它们[…] XML文件->对象->节俭对象->二进制文件 好了,现在开始有意义了。我不是PHP专业人士,也不太了解细节,所以我只能给你提纲。但这应该是一个很好的起点。理论上
TBinarySerializer
类并调用serialize()
方法,如$buffer=$serializer.serialize($object)
。返回的$buffer
包含以二进制格式序列化的数据TBinarySerializer
类可以在/lib/php/src/lib/Thrift/Serializer
下找到,谢谢
对于其他未来读者:
好吧,我花了很多时间去做,我成功了
$bins = new TBinarySerializer();
$seria= $bins->serialize($my_thrift_object);
echo $seria;
它起作用了
$deseria = new Classofmythriftstruct(); //My empty thrift object
$binde = new TBinarySerializer();
$deseria = $binde->deserialize($seria, $deseria);
它起作用了
$deseria = new Classofmythriftstruct(); //My empty thrift object
$binde = new TBinarySerializer();
$deseria = $binde->deserialize($seria, $deseria);
我在Java中看到,我们可以将协议放在TBinarySerializer()的参数中。
但是在php中,它不起作用
所以我在找,我找到了!
您可以在/lib/php/src/lib/Thrift/Serializer/TBinarySerializer.php中修改TBinarySerializer类,并用您想要的任何协议替换“TCompactProtocol”!
TCompactProtocol是默认的协议
谢谢大家!
现在,我必须将simpleXMLObject转换为thrift对象,或者如果我找到一个低级解析器,我直接使用thrift对象
然后,用Ruby做这个
然后,我可能会用拼花地板的形式。。。(与Cloudera Impala一起使用)
我将XML文件转换为旧文件以将其存储到HDF中。
直接使用thrift是不可能的,有很多旧的XML文件需要转换
这是如此的酷,即使我已经通过了很多天来理解 好的,我有很多xml文件。我想可持续地储存它们。(具有结构验证和适应变化的能力)。我不知道怎么做,但我想使用节俭,因为我可以使用一些Hadoop组件(HDFS和Impala)。之后,为什么不使用拼花地板呢。。然后,XML文件->对象->节俭对象->二进制文件。很抱歉,我什么都不懂。如果你有任何关于apache thrift的文档,使用PHP语言,只使用序列化器/反序列化器,我就是接受者!