Fix more issues for reference values (#5613)

* Fix more issues for reference values

* Revert change in gdb test

* Add more tests
diff --git a/php/tests/array_test.php b/php/tests/array_test.php
index d47a107..b251404 100644
--- a/php/tests/array_test.php
+++ b/php/tests/array_test.php
@@ -533,33 +533,41 @@
     # Test reference in array
     #########################################################
 
-    public function testArrayElementIsReference()
+    public function testArrayElementIsReferenceInSetters()
     {
+        // Bool elements
+        $values = [true];
+        array_walk($values, function (&$value) {});
+        $m = new TestMessage();
+        $m->setRepeatedBool($values);
+
+        // Int32 elements
+        $values = [1];
+        array_walk($values, function (&$value) {});
+        $m = new TestMessage();
+        $m->setRepeatedInt32($values);
+
+        // Double elements
+        $values = [1.0];
+        array_walk($values, function (&$value) {});
+        $m = new TestMessage();
+        $m->setRepeatedDouble($values);
+
+        // String elements
+        $values = ['a'];
+        array_walk($values, function (&$value) {});
+        $m = new TestMessage();
+        $m->setRepeatedString($values);
+
+        // Message elements
         $m = new TestMessage();
         $subs = [1, 2];
-
         foreach ($subs as &$sub) {
             $sub = new Sub(['a' => $sub]);
         }
-
         $m->setRepeatedMessage($subs);
     }
 
-    public function testArrayIsReference()
-    {
-        $keys = [['repeated_message' => [['a' => 1]]]];
-
-        foreach ($keys as &$key) {
-            foreach ($key['repeated_message'] as &$element) {
-              $element = new Sub($element);
-            }
-            $key = new TestMessage($key);
-        }
-
-        $m = new TestMessage();
-        $m->setRepeatedDeep($keys);
-    }
-
     #########################################################
     # Test memory leak
     #########################################################