Make REST PHP deserializer generated PHP code support map/list/set

Summary: list/set are comma-separated and explode, map is JSON decoded

Reviewed By: hzhao

Test Plan: Invoke API methods via JSON


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665290 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 b913185..70dbb51 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/generate/t_php_generator.cc
@@ -912,7 +912,16 @@
           ((t_base_type*)atype)->is_string_list()) {
         f_service_ << 
           indent() << "$" << (*a_iter)->get_name() << " = explode(',', $" << (*a_iter)->get_name() << ");" << endl;
-      }      
+      } else if (atype->is_map()) {
+        f_service_ << 
+          indent() << "$" << (*a_iter)->get_name() << " = json_decode($" << (*a_iter)->get_name() << ", true);" << endl;
+      } else if (atype->is_list()) {
+        f_service_ << 
+          indent() << "$" << (*a_iter)->get_name() << " = explode(',', $" << (*a_iter)->get_name() << ");" << endl;
+      } else if (atype->is_set()) {
+        f_service_ << 
+          indent() << "$" << (*a_iter)->get_name() << " = array_fill_keys(explode(',', $" << (*a_iter)->get_name() << "), 1);" << endl;
+      }
     }
     f_service_ <<
       indent() << "return $this->impl_->" << (*f_iter)->get_name() << "(" << argument_list((*f_iter)->get_arglist()) << ");" << endl;