THRIFT-342. php: PHP: can't have sets of complex types

This patch implements a dual approach for scalars vs objects.

Patch: Jake Farrell

git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1091580 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc
index d1b33a9..e63f408 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/generate/t_php_generator.cc
@@ -1870,8 +1870,11 @@
 
   generate_deserialize_field(out, &felem);
 
-  indent(out) <<
-    "$" << prefix << "[$" << elem << "] = true;" << endl;
+  indent(out) << "if (is_scalar($" << elem << ")) {" << endl;
+  indent(out) << "  $" << prefix << "[$" << elem << "] = true;" << endl;
+  indent(out) << "} else {" << endl;
+  indent(out) << "  $" << prefix << " []= $" << elem << ";" << endl;
+  indent(out) << "}" << endl;
 }
 
 void t_php_generator::generate_deserialize_list_element(ofstream &out,
@@ -2087,8 +2090,11 @@
   } else if (ttype->is_set()) {
     string iter = tmp("iter");
     indent(out) <<
-      "foreach ($" << prefix << " as $" << iter << " => $true)" << endl;
+      "foreach ($" << prefix << " as $" << iter << ")" << endl;
     scope_up(out);
+    indent(out) << "if (is_scalar($" << iter << ")) {" << endl <<
+      indent() << "  $" << prefix << "[$" << iter << "] = true;" << endl <<
+      indent() << "}" << endl;
     generate_serialize_set_element(out, (t_set*)ttype, iter);
     scope_down(out);
   } else if (ttype->is_list()) {