<?php require dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "contrib/php/addressbook.proto.php"; // example: ProtocolBuffers to Json format $person = new Tutorial_Person(); $person->setId(21); $person->setName("John Doe"); $descriptor = $person->getDescriptor(); $result = array(); foreach ($descriptor->getFields() as $field) { if (!$field->isExtension()) { if ($person->has($field->getName())) { // this does not care about Message. $value = $person->get($field->getName()); $result[$field->getName()] = $value; } } } echo json_encode($result, JSON_PRETTY_PRINT);
<?php require dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "contrib/php/addressbook.proto.php"; $person = new Tutorial_Person(); $person->setId(21); $person->setName("John Doe"); $data = serialize($person); printf("# decoding benchmark (serialize / unserialize).\n"); printf("# target message size: %d bytes.\n", strlen($data)); printf("# start\n"); $begin = microtime(true); $attempts = 100000; for ($i = 0; $i < $attempts; $i++) { unserialize($data); } $end = microtime(true); printf("# Result:\n"); printf("# decoding %d messages\n", $attempts); printf("# processing time: %6f (%f/message)\n", $end - $begin, ($end - $begin) / $attempts); printf("# total bytes: %d bytes\n", strlen($data) * $attempts);
<?php require dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "contrib/php/addressbook.proto.php"; $person = new Tutorial_Person(); $person->setId(21); $person->setName("John Doe"); $data = msgpack_pack($person); printf("# decoding benchmark (msgpack).\n"); printf("# target message size: %d bytes.\n", strlen($data)); printf("# start\n"); $begin = microtime(true); $attempts = 100000; for ($i = 0; $i < $attempts; $i++) { msgpack_unpack($data); } $end = microtime(true); printf("# Result:\n"); printf("# decoding %d messages\n", $attempts); printf("# processing time: %6f (%f/message)\n", $end - $begin, ($end - $begin) / $attempts); printf("# total bytes: %d bytes\n", strlen($data) * $attempts);
<?php require dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "contrib/php/addressbook.proto.php"; $person = new Tutorial_Person(); $person->setId(21); $person->setName("John Doe"); $data = $person->serializeToString($person); printf("# decoding benchmark (protocolbuffers).\n"); printf("# target message size: %d bytes.\n", strlen($data)); printf("# start\n"); $begin = microtime(true); $attempts = 100000; for ($i = 0; $i < $attempts; $i++) { Tutorial_Person::parseFromString($data); } $end = microtime(true); printf("# Result:\n"); printf("# decoding %d messages\n", $attempts); printf("# processing time: %6f (%f/message)\n", $end - $begin, ($end - $begin) / $attempts); printf("# total bytes: %d bytes\n", strlen($data) * $attempts);
<?php require dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "contrib/php/addressbook.proto.php"; $person = new Tutorial_Person(); $person->setId(21); $person->setName("John Doe"); $data = ProtocolBuffers::encode($person); printf("# decoding benchmark (protocolbuffers).\n"); printf("# target message size: %d bytes.\n", strlen($data)); printf("# start\n"); $begin = microtime(true); $attempts = 100000; for ($i = 0; $i < $attempts; $i++) { ProtocolBuffers::decode("Tutorial_Person", $data); } $end = microtime(true); printf("# Result:\n"); printf("# decoding %d messages\n", $attempts); printf("# processing time: %6f (%f/message)\n", $end - $begin, ($end - $begin) / $attempts); printf("# total bytes: %d bytes\n", strlen($data) * $attempts);
<?php require dirname(__FILE__) . DIRECTORY_SEPARATOR . join(DIRECTORY_SEPARATOR, array("php", "addressbook.proto.php")); $db = "addressbook.db"; $addressbook = load($db); $person = new Tutorial_Person(); $person->setId(1); $person->setName("John Doe"); $person->setEmail("*****@*****.**"); $phone = new Tutorial_Person_PhoneNumber(); $phone->setNumber("1234 5 67 78"); $phone->setType(Tutorial_Person_PhoneType::HOME); $person->appendPhone($phone); $phone = new Tutorial_Person_PhoneNumber(); $phone->setNumber("1234 5 67 79"); $phone->setType(Tutorial_Person_PhoneType::HOME); $person->appendPhone($phone); echo $person; exit; echo "____________________\n"; $addressbook->appendPerson($person); var_dump($addressbook); save($db, $addressbook); exit; function load($path) { $data = @file_get_contents($path); try { $result = ProtocolBuffers::decode("Tutorial_AddressBook", $data); } catch (ProtocolBuffersInvalidProtocolBufferException $e) { $result = new Tutorial_AddressBook();
/** * get descriptor for protocol buffers * * @return array */ public static function getDescriptor() { if (!isset(self::$descriptor)) { $desc = new ProtocolBuffersDescriptorBuilder(); $desc->addField(1, new ProtocolBuffersFieldDescriptor(array("type" => ProtocolBuffers::TYPE_STRING, "name" => "name", "packable" => false, "repeated" => false, "default" => null))); $desc->addField(2, new ProtocolBuffersFieldDescriptor(array("type" => ProtocolBuffers::TYPE_INT32, "name" => "id", "packable" => false, "repeated" => false, "default" => null))); $desc->addField(3, new ProtocolBuffersFieldDescriptor(array("type" => ProtocolBuffers::TYPE_STRING, "name" => "email", "packable" => false, "repeated" => false, "default" => null))); $desc->addField(4, new ProtocolBuffersFieldDescriptor(array("type" => ProtocolBuffers::TYPE_MESSAGE, "name" => "phone", "packable" => false, "repeated" => false, "default" => null, "message" => "Tutorial_Person_PhoneNumber"))); self::$descriptor = $desc->build(); } return self::$descriptor; }