Rename encode/decode to serializeToString/mergeFromString (#2795)

This better shows the semantic of the API. For already setted fields,
mergeFromString do replacement for singular fields and appending for
repeated fields.
diff --git a/php/tests/test_base.php b/php/tests/test_base.php
index 729fea3..67048f4 100644
--- a/php/tests/test_base.php
+++ b/php/tests/test_base.php
@@ -12,6 +12,11 @@
         TestUtil::setTestMessage($m);
     }
 
+    public function setFields2(TestMessage $m)
+    {
+        TestUtil::setTestMessage2($m);
+    }
+
     public function expectFields(TestMessage $m)
     {
         $this->assertSame(-44,  $m->getOptionalSint32());
@@ -98,6 +103,139 @@
         $this->assertEquals(36, $m->getMapInt32Message()[1]->GetA());
     }
 
+    // Test message merged from setFields and setFields2.
+    public function expectFieldsMerged(TestMessage $m)
+    {
+        $this->assertSame(-144,  $m->getOptionalSint32());
+        $this->assertSame(146,   $m->getOptionalFixed32());
+        $this->assertSame(-146,  $m->getOptionalSfixed32());
+        $this->assertSame(11.5,  $m->getOptionalFloat());
+        $this->assertSame(11.6,  $m->getOptionalDouble());
+        $this->assertSame(true, $m->getOptionalBool());
+        $this->assertSame('aa',  $m->getOptionalString());
+        $this->assertSame('bb',  $m->getOptionalBytes());
+        $this->assertSame(133,   $m->getOptionalMessage()->getA());
+        if (PHP_INT_SIZE == 4) {
+            $this->assertSame('-143',  $m->getOptionalInt64());
+            $this->assertSame('143',   $m->getOptionalUint64());
+            $this->assertSame('-145',  $m->getOptionalSint64());
+            $this->assertSame('147',   $m->getOptionalFixed64());
+            $this->assertSame('-147',  $m->getOptionalSfixed64());
+        } else {
+            $this->assertSame(-143,  $m->getOptionalInt64());
+            $this->assertSame(143,   $m->getOptionalUint64());
+            $this->assertSame(-145,  $m->getOptionalSint64());
+            $this->assertSame(147,   $m->getOptionalFixed64());
+            $this->assertSame(-147,  $m->getOptionalSfixed64());
+        }
+
+        $this->assertEquals(-42,  $m->getRepeatedInt32()[0]);
+        $this->assertEquals(42,   $m->getRepeatedUint32()[0]);
+        $this->assertEquals(-43,  $m->getRepeatedInt64()[0]);
+        $this->assertEquals(43,   $m->getRepeatedUint64()[0]);
+        $this->assertEquals(-44,  $m->getRepeatedSint32()[0]);
+        $this->assertEquals(-45,  $m->getRepeatedSint64()[0]);
+        $this->assertEquals(46,   $m->getRepeatedFixed32()[0]);
+        $this->assertEquals(47,   $m->getRepeatedFixed64()[0]);
+        $this->assertEquals(-46,  $m->getRepeatedSfixed32()[0]);
+        $this->assertEquals(-47,  $m->getRepeatedSfixed64()[0]);
+        $this->assertEquals(1.5,  $m->getRepeatedFloat()[0]);
+        $this->assertEquals(1.6,  $m->getRepeatedDouble()[0]);
+        $this->assertEquals(true, $m->getRepeatedBool()[0]);
+        $this->assertEquals('a',  $m->getRepeatedString()[0]);
+        $this->assertEquals('b',  $m->getRepeatedBytes()[0]);
+        $this->assertEquals(TestEnum::ZERO,  $m->getRepeatedEnum()[0]);
+        $this->assertEquals(34,   $m->getRepeatedMessage()[0]->GetA());
+
+        $this->assertEquals(-52,   $m->getRepeatedInt32()[1]);
+        $this->assertEquals(52,    $m->getRepeatedUint32()[1]);
+        $this->assertEquals(-53,   $m->getRepeatedInt64()[1]);
+        $this->assertEquals(53,    $m->getRepeatedUint64()[1]);
+        $this->assertEquals(-54,   $m->getRepeatedSint32()[1]);
+        $this->assertEquals(-55,   $m->getRepeatedSint64()[1]);
+        $this->assertEquals(56,    $m->getRepeatedFixed32()[1]);
+        $this->assertEquals(57,    $m->getRepeatedFixed64()[1]);
+        $this->assertEquals(-56,   $m->getRepeatedSfixed32()[1]);
+        $this->assertEquals(-57,   $m->getRepeatedSfixed64()[1]);
+        $this->assertEquals(2.5,   $m->getRepeatedFloat()[1]);
+        $this->assertEquals(2.6,   $m->getRepeatedDouble()[1]);
+        $this->assertEquals(false, $m->getRepeatedBool()[1]);
+        $this->assertEquals('c',   $m->getRepeatedString()[1]);
+        $this->assertEquals('d',   $m->getRepeatedBytes()[1]);
+        $this->assertEquals(TestEnum::ONE,  $m->getRepeatedEnum()[1]);
+        $this->assertEquals(35,    $m->getRepeatedMessage()[1]->GetA());
+
+        $this->assertEquals(-142,  $m->getRepeatedInt32()[2]);
+        $this->assertEquals(142,   $m->getRepeatedUint32()[2]);
+        $this->assertEquals(-143,  $m->getRepeatedInt64()[2]);
+        $this->assertEquals(143,   $m->getRepeatedUint64()[2]);
+        $this->assertEquals(-144,  $m->getRepeatedSint32()[2]);
+        $this->assertEquals(-145,  $m->getRepeatedSint64()[2]);
+        $this->assertEquals(146,   $m->getRepeatedFixed32()[2]);
+        $this->assertEquals(147,   $m->getRepeatedFixed64()[2]);
+        $this->assertEquals(-146,  $m->getRepeatedSfixed32()[2]);
+        $this->assertEquals(-147,  $m->getRepeatedSfixed64()[2]);
+        $this->assertEquals(11.5,  $m->getRepeatedFloat()[2]);
+        $this->assertEquals(11.6,  $m->getRepeatedDouble()[2]);
+        $this->assertEquals(false, $m->getRepeatedBool()[2]);
+        $this->assertEquals('aa',  $m->getRepeatedString()[2]);
+        $this->assertEquals('bb',  $m->getRepeatedBytes()[2]);
+        $this->assertEquals(TestEnum::TWO,  $m->getRepeatedEnum()[2]);
+        $this->assertEquals(134,   $m->getRepeatedMessage()[2]->GetA());
+
+        if (PHP_INT_SIZE == 4) {
+            $this->assertEquals('-163', $m->getMapInt64Int64()['-63']);
+            $this->assertEquals('163',  $m->getMapUint64Uint64()['63']);
+            $this->assertEquals('-165', $m->getMapSint64Sint64()['-65']);
+            $this->assertEquals('167',  $m->getMapFixed64Fixed64()['67']);
+            $this->assertEquals('-169',  $m->getMapSfixed64Sfixed64()['-69']);
+        } else {
+            $this->assertEquals(-163, $m->getMapInt64Int64()[-63]);
+            $this->assertEquals(163,  $m->getMapUint64Uint64()[63]);
+            $this->assertEquals(-165, $m->getMapSint64Sint64()[-65]);
+            $this->assertEquals(167,  $m->getMapFixed64Fixed64()[67]);
+            $this->assertEquals(-169,  $m->getMapSfixed64Sfixed64()[-69]);
+        }
+        $this->assertEquals(-162, $m->getMapInt32Int32()[-62]);
+        $this->assertEquals(162,  $m->getMapUint32Uint32()[62]);
+        $this->assertEquals(-164, $m->getMapSint32Sint32()[-64]);
+        $this->assertEquals(166,  $m->getMapFixed32Fixed32()[66]);
+        $this->assertEquals(-168,  $m->getMapSfixed32Sfixed32()[-68]);
+        $this->assertEquals(13.5, $m->getMapInt32Float()[1]);
+        $this->assertEquals(13.6, $m->getMapInt32Double()[1]);
+        $this->assertEquals(false , $m->getMapBoolBool()[true]);
+        $this->assertEquals('ee', $m->getMapStringString()['e']);
+        $this->assertEquals('ff', $m->getMapInt32Bytes()[1]);
+        $this->assertEquals(TestEnum::TWO, $m->getMapInt32Enum()[1]);
+        $this->assertEquals(136, $m->getMapInt32Message()[1]->GetA());
+
+        if (PHP_INT_SIZE == 4) {
+            $this->assertEquals('-163', $m->getMapInt64Int64()['-163']);
+            $this->assertEquals('163',  $m->getMapUint64Uint64()['163']);
+            $this->assertEquals('-165', $m->getMapSint64Sint64()['-165']);
+            $this->assertEquals('167',  $m->getMapFixed64Fixed64()['167']);
+            $this->assertEquals('-169',  $m->getMapSfixed64Sfixed64()['-169']);
+        } else {
+            $this->assertEquals(-163, $m->getMapInt64Int64()[-163]);
+            $this->assertEquals(163,  $m->getMapUint64Uint64()[163]);
+            $this->assertEquals(-165, $m->getMapSint64Sint64()[-165]);
+            $this->assertEquals(167,  $m->getMapFixed64Fixed64()[167]);
+            $this->assertEquals(-169,  $m->getMapSfixed64Sfixed64()[-169]);
+        }
+        $this->assertEquals(-162, $m->getMapInt32Int32()[-162]);
+        $this->assertEquals(162,  $m->getMapUint32Uint32()[162]);
+        $this->assertEquals(-164, $m->getMapSint32Sint32()[-164]);
+        $this->assertEquals(166,  $m->getMapFixed32Fixed32()[166]);
+        $this->assertEquals(-168,  $m->getMapSfixed32Sfixed32()[-168]);
+        $this->assertEquals(13.5, $m->getMapInt32Float()[2]);
+        $this->assertEquals(13.6, $m->getMapInt32Double()[2]);
+        $this->assertEquals(false , $m->getMapBoolBool()[false]);
+        $this->assertEquals('ee', $m->getMapStringString()['ee']);
+        $this->assertEquals('ff', $m->getMapInt32Bytes()[2]);
+        $this->assertEquals(TestEnum::TWO, $m->getMapInt32Enum()[2]);
+        $this->assertEquals(136, $m->getMapInt32Message()[2]->GetA());
+    }
+
     public function expectEmptyFields(TestMessage $m)
     {
         $this->assertSame(0,   $m->getOptionalInt32());