Flex RemoteObject: массивы с одинаковыми значениями ссылаются на одну и ту же память - PullRequest
2 голосов
/ 11 ноября 2009

Если я отправляю удаленные данные из Zend_Amf во Flex, если два свойства массива объекта имеют одинаковые значения данных, они десериализуются на удаленном конце с одним и тем же хранилищем памяти.

Пример: объект 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");

Когда я отлаживаю объект TestVO в отладчике Flex, я получаю:

test1 Array (@ 597d779)
массив test2 (@ 597d779)

то есть: они ссылаются на один и тот же объект массива.

Если я отправляю с удаленного сервера слегка отличающиеся значения для 2-х массивов:

$ this-> test1 = array ("foo", "bar");
$ this-> test2 = array ("bar", "foo");

В отладчике Flex объект TestVO теперь имеет два отдельных массива, как и следовало ожидать:

test1 Array (@ 54cb7e9)
массив test2 (@ 54cb741)

Вывод AMF выглядит Хорошо, он всегда отправляет два отдельных значения для test1 / test2, даже если они имеют одинаковые значения, поэтому я предполагаю, что Flex де-сериализует это?

Есть идеи? Спасибо.

Ответы [ 2 ]

2 голосов
/ 11 ноября 2009

AMF делает это, чтобы получить некоторое сжатие по проводу. Если вы не хотите этого, вы можете переключиться на формат AMF0 вместо AMF3. Но я не уверен, как это сделать с ZendAMF.

0 голосов
/ 12 ноября 2009

Обнаружена ошибка ZF-7634 в Zend Framework реализации AMF. Он неправильно сериализует массивы.

http://framework.zend.com/issues/browse/ZF-7634

...