如果我将远程数据从Zend_Amf发送到Flex,如果对象上的两个数组属性具有相同的数据值,那么它们将在远端使用相同的内存存储进行反序列化。Flex RemoteObject:具有相同值的数组引用相同的内存
示例:AS3对象:
段:
[RemoteClass(alias="TestVO")]
public class TestVO
{
public var test1:Array;
public var test2:Array;
}
当这个从Zend_Amf服务器接收远程数据,如果阵列的数据是相同的它分配同一存储到两个阵列。
如:从远程(ZendAMF)对象我送:
$this->test1 = array("foo", "bar");
$this->test2 = array("foo", "bar");
当我调试的Flex调试器TestVO对象,我得到:
test1的阵列(@ 597d779)
TEST2阵列(@ 597d779)
ie:它们引用相同的数组对象。
如果我从远程服务器发送针对2个阵列略微不同的值:
$这 - > TEST1 =阵列( “foo” 的 “条”);
$ this-> test2 = array(“bar”,“foo”);
在Flex调试器TestVO对象现在有两个独立的数组正如你所期望:
test1的阵列(@ 54cb7e9)
test2的阵列(@ 54cb741)
AMF输出看起来好吧,即使它们具有相同的值,它总是会为test1/test2发送两个独立的值,所以我猜这是Flex解序列化它的方式?
任何想法?谢谢。
如何两个阵列在相同的顺序,而不是字符串相同的数字?字符串是不可变的,数字不是 - 所有持有“foo”的字符串变量指向同一个字符串对象。但是两个数字变量持有3点到不同的内存位置。 – Amarghosh 2009-11-11 12:25:00
是的 - 有数字的数组遇到同样的问题。 正如詹姆斯在下面提到的那样,似乎AMF3使用的“压缩”被错误地反序列化。仅仅因为数据是相同的,它假定两个引用必须最初与远程端上的相同变量相关,但情况并非如此。 – NigelF 2009-11-12 10:54:33