PHP variable value when send by HTTPService or RemoteObject

มาดูกันว่าเกิดอะไรขึ้นถ้าเราส่ง object ที่ซับซ้อนจาก Flex app. ไปยัง PHP หรือ AMFPHP

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<!-- AS2PHP.mxml -->
 <mx:Script>
 <![CDATA[
 import mx.controls.TextInput;
 import mx.controls.Alert;
 import mx.rpc.events.FaultEvent;
 import mx.rpc.events.ResultEvent;

 private var ar:Array = new Array(
 new Array("one", "two", "three"),
 new Array(
 new Array("s1", "s2"),
 new Array("t1", "t2"),
 {obj1:"obj1_val", obj2:"obj2_val"},
 {obj1:"obj1_val", obj2:new Array("in_obj2_no1", "in_obj2_no2")}
 ),
 new Date(),
 new TextInput()
 );

 private function btClickHs():void{
 hs.send(ar);
 }

 private function btClickHsAdvance():void{
 hsAdvance.send(ar);
 }

 private function faultHandler( event:FaultEvent ):void{
 Alert.show("Fail");
 }

 private function hsResultHandler( event:ResultEvent ):void{

 }

 private function hsAdvanceResultHandler( event:ResultEvent ):void{

 }

 private function btClickRm():void{
 rm.getOperation("as2amfphp").send(ar);
 }

 private function rmResultHandler( event:ResultEvent ):void{

 }
 ]]>
 </mx:Script>
 <mx:HTTPService id="hs" url="httpservice/actionscript2php.php"
 fault="faultHandler(event)"
 result="hsResultHandler(event)"/>

 <mx:HTTPService id="hsAdvance" url="httpservice/actionscript2php_advance.php"
 fault="faultHandler(event)"
 result="hsAdvanceResultHandler(event)"/>

 <mx:RemoteObject id="rm"
 endpoint="amfphp/gateway.php"
 source="actionscript2amfphp.ActionScript2AMFPHPDao"
 destination="none"
 fault="faultHandler(event)"
 result="rmResultHandler(event)"/>
 <!-- Use RemoteObject with out services-config.xml file -->
 <mx:Button click="btClickHs()" label="Send by HTTPService"/>
 <mx:Button click="btClickHsAdvance()" label="Send by HTTPService advance"/>
 <mx:Button click="btClickRm()" label="Send by RemoteObject"/>

</mx:Application>

ลองดูผลลัพธ์อย่างง่าย

<?php
//httpservice/actionscript2php.php
//ini_set('default_charset', 'UTF-8');
header('Content-Type:text/html; charset=UTF-8');
$as2PHPTrace = new ActionScript2PHPTrace();
echo print_r($_GET);

ผลลัพธ์เห็นโครงสร้างคร่าวๆ กับค่าต่างๆ

<?php
// httpservice/actionscript2php_advance.php
// Ref : http://php.net/manual/en/function.gettype.php
class ActionScript2PHPTrace {

 function _tabbing($i_tab) {
 $str = "";
 for($i = 0; $i < $i_tab; $i++) {
 $str .= "\t";
 }
 return $str;
 }

 function getTrace($var, $i_tab = 0) {
 $str = "";

 if( is_array($var) ) {
 $str .= "Array[\n";
 foreach ($var as $key_ar => $value_ar) {
 $str .= $this->_tabbing($i_tab + 1).$key_ar.":".gettype($value_ar)."=>".$this->getTrace($value_ar, $i_tab + 1)."\n";
 }
 $str .= $this->_tabbing($i_tab)."]\n";
 return $str;
 }

 if( is_object($var) ) {
 $str .= "{\n";
 foreach ($var as $key_obj => $value_obj) {
 $str .= $this->_tabbing($i_tab + 1).$key_obj.":".gettype($value_obj)."=>".$this->getTrace($value_obj, $i_tab + 1)."\n";
 }
 $str .= $this->_tabbing($i_tab)."}";
 return $str;
 }

 return $var;
 }
}
//ini_set('default_charset', 'UTF-8');
header('Content-Type:text/html; charset=UTF-8');
$as2PHPTrace = new ActionScript2PHPTrace();
echo $as2PHPTrace->getTrace($_GET);

ผลลัพธ์ก็ยังเป็นประเภท string

<?php
//amfphp/service/actionscript2amfphp/ActionScript2AMFPHPDao.php
class ActionScript2AMFPHPDao {
 function as2amfphp($obj){
 return $obj;
 }
}

ผลลัพธ์คือสามารถมองเห็นความซับซ้อนของ object ที่ส่งไปได้

Advertisement

About knopsod
Developer by Flex/Flash, ActionScript, PHP, Java, MySQL,PostgreSQL, Oracle, Ebay, PayPal, Alibaba, iOffer รับปรึกษา สอน และพัฒนาซอฟแวร์ ซื้อ ขาย ประมูลสินค้าออนไลน์

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.