PHP에서 프로토콜버퍼는 대략 이 정도만 기억하면 된다.
use Google\Protobuf\Value;
use Google\Protobuf\Struct;
use Google\Protobuf\ListValue;
// 단순타입은 그냥 하면 된다.
// "foo"
$foo = (new Value)->setStringValue('foo');
// object는 Struct 사용한다.
// {"bar":1}
$bar = (new Struct)->setFields([
'bar' => (new Value)->setNumberValue(1),
]);
// (객체)배열은 ListValue 사용한다.
// [{"a":null},{"b":true}]
$ab = (new ListValue)->setValues([
(new Value)->setStructValue((new Struct)->setFields([
'a' => (new Value)->setNullValue(0)
])),
(new Value)->setStructValue((new Struct)->setFields([
'b' => (new Value)->setBoolValue(1)
])),
]);
// 검산하는 법은 모든 Message 구현체에서 똑같다.
var_dump($ab->serializeToJsonString());
Struct
와 ListValue
뿐임에 주목할 것. PHP에서 데이터구조체는 array라고 부르는 해시맵 하나뿐이다. 그래서 이 2개로 충분하다.(new Value)->set뭐시기Value((new 뭐시기)->어쩌구
구문에 주목할 것. 무언가에게 뭐시기
를 할당할 때 쓰는 구문이다. PHP 하던 기분으로 갑자기 이렇게 체계적인 구조체를 보면 길 잃어버리기 십상이므로, 이 구문을 복창하면서 작성하자.