![]() |
из array php в Vector.<T> AS3
Использую Zend Framework.
PHP код:
а вот с такой: PHP код:
Прошу помочь)) |
Просто так не получится, нужно будет реально создавать SomethingType, десериализовать объекты в них и засовывать в Vector.
|
Вот тут столкнулся с такой неприятностью (пишу не из дома, так что скопипастить код не смогу, пишу на память)
Есть класс SomethingData в AS и соответствующий something_data в пхп. Т-к SomethingData помечен тегом [RemoteClass], то при получении данных, и при условии, что в пхп коде к методу, возвращаемому something_data есть коммент PHP код:
В AS классе должна быть паблик переменная или сеттер, именуемая something_array (иначе мы ее не получим). Я пытался сделать преобразование типа через сеттер/геттер, но, т-к у них должен быть одинаковый тип, ничего не вышло. Можно конечно сделать метод getSomethingArray, но мне в этом случае не нравится, что останется либо паблик сеттер, либо просто поле, и я могу руками ковырять массив. Меня это смущает сильно. |
В PHPDoc надо писать array[Something_Type]
|
[RemoteClass] делает следующее (при чем очень плохо, с попыткой предотвратить конфликты с флексовыми модулями, и там у него просто не получается это сделать, но это отдельная история, вобщем, не используйте его).
Код AS3:
Дальше, если вы получаете массив из объектов типа Object, а не любого из его наследников (кастование к нужному типу приводит к ошибке) - это значит, что сериализация вообще не работает. Zend_Amf - не лучшая библиотека, кроме того, не реализует всех возможностей формата, и очень плохо настраивается. На столько плохо, что легче написать по-новой, чем ее настроить. Это касается бесконечной вереницы класс-лоадеров в Zend и мартышкиными потугами "замутить крутую архитектуру", которая вылилась в 100500 никому не нужных классов... Но, опять же, эта информация вам мало поможет :) Так вот, если сериализация вообще не работает, значит Zend не находит PHP классы нужные для нее... Комментарии возвращаемого типа нужны, на сколько я знаю, для генерации кода какими-то инструментами Flash Builder'a, на сериализацию они не влияют / их вообще можно не писать. Если вы получаете массив из объектов нужного типа: у вас все работает, как нужно, Vector.<T> появился после того, как был написан AMF3.0 формат, и по-этому пока-что не используется в сериализации (не смотря на то, что некоторые реализации понимают тег #13 - это так бы записывался вектор, если бы он был, но, при этом Флеш плеер оказывает медвежью услугу - он, когда сериализует Vector.<T>, то всегда тип указывает как Vector.<Object>, что, вобщем-то, делает всю идею бесполезной. Поэтому, как говорилось выше - если вам нужен вектор, прийдется его создавать из массива - о целесообразности думайте сами: есть ли смысл расходовать память / так уж ли необходимо быть там вектору? |
Страшно становится)))) Вывод на будущее: Zend - в топку?
Писать все руками, и пользоваться чистым AS3? Или все-же какие-то Flex-вкусности и инструменты Builder-а могут быть полезны? |
Ну, смотрите... код сгенеренный в FB может быть полезным в некоторых ситуациях:
- что-то потестировать (просто быстрее сгенерить, чем написать). - для совсем новичков, которые сами не напишут. Но использовать в настоящем работающем приложении... я бы даже не задумывался о такой возможности :) Что до Zend - я знаком только с Zend_Amf. Это по сути продолжение AMFPHP, которое один из коммитеров решил приладить к Zend, и его поддержали. На первый взгляд, то, что касалось сериализации / общения с клиентом не поменялось, но добавилась куча мусора связанного с Zend фреймворком, ну и ограничения на имена файлов / классов и т.п. Кроме того, из-за того, что нужно было приткнуть "архитектуру" к уже работающей библиотеке, библиотека стала работать хуже :) В смысле медленнее. Ну и в целом про Flex говорить бы не стал тоже :) есть и позитивные моменты. Но мое глубокое убеждение, что шаблоны хороши только тогда, когда - точно знаешь какой код из них создается. - есть возможность их поменять, если нужно. Первое достижимо методом проб и ошибок, второе - никак, если мы говорим про Flash Builder... но это, судя по всему идеология разработчиков такая, смысл которой от меня ускользает. |
Ясно. А бенчмаркам не верить? http://www.jamesward.com/census2/
|
| Часовой пояс GMT +4, время: 09:55. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.