TIL PHP 4/1/2025

엽토군·2025년 4월 1일
0

TIL

목록 보기
15/16

Google Protobuf 컨닝페이퍼

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());

잡설

  • 데이터 구조화에 사용된 것이 StructListValue뿐임에 주목할 것. PHP에서 데이터구조체는 array라고 부르는 해시맵 하나뿐이다. 그래서 이 2개로 충분하다.
  • (new Value)->set뭐시기Value((new 뭐시기)->어쩌구 구문에 주목할 것. 무언가에게 뭐시기를 할당할 때 쓰는 구문이다. PHP 하던 기분으로 갑자기 이렇게 체계적인 구조체를 보면 길 잃어버리기 십상이므로, 이 구문을 복창하면서 작성하자.
  • 프로토콜버퍼는 처음 봤을 때 1주일 걸렸고 이번에는 꼬박 이틀 걸렸다 이젠 커닝페이퍼도 있으니 다음엔 하루 정도면 다시 감이 살겠지?
profile
6년차 PHP 개발자입니다.

0개의 댓글

관련 채용 정보