|
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
из array php в Vector.<T> AS3
Использую Zend Framework.
- такая переменная в AS определяется как SomethingType - класс AS, соответствующий something_type, а вот с такой: возникают проблемы. На входе получаем Array, каждый из элементов которого просто Object. А хотелось бы получить Array of SomethingType, а еще лучше Vector.<SomethingType> Прошу помочь)) |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Просто так не получится, нужно будет реально создавать SomethingType, десериализовать объекты в них и засовывать в Vector.
|
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Вот тут столкнулся с такой неприятностью (пишу не из дома, так что скопипастить код не смогу, пишу на память)
Есть класс SomethingData в AS и соответствующий something_data в пхп. Т-к SomethingData помечен тегом [RemoteClass], то при получении данных, и при условии, что в пхп коде к методу, возвращаемому something_data есть коммент полученный объект определится как SomethingData (Механизм мне не известен). Пусть в классе something_data есть поле something_array, состоящий из объектов something_type (о чем речь шла в первом посте). В AS классе должна быть паблик переменная или сеттер, именуемая something_array (иначе мы ее не получим). Я пытался сделать преобразование типа через сеттер/геттер, но, т-к у них должен быть одинаковый тип, ничего не вышло. Можно конечно сделать метод getSomethingArray, но мне в этом случае не нравится, что останется либо паблик сеттер, либо просто поле, и я могу руками ковырять массив. Меня это смущает сильно. Последний раз редактировалось Silicium; 26.08.2011 в 11:40. |
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
В PHPDoc надо писать array[Something_Type]
|
|
|||||
Modus ponens
|
[RemoteClass] делает следующее (при чем очень плохо, с попыткой предотвратить конфликты с флексовыми модулями, и там у него просто не получается это сделать, но это отдельная история, вобщем, не используйте его).
Если вас интересует, как именно он это делает - можете скомпилировать с ключем -keep и посмотреть исходники FlexInit, это где-то там было если память не изменяет. Дальше, если вы получаете массив из объектов типа Object, а не любого из его наследников (кастование к нужному типу приводит к ошибке) - это значит, что сериализация вообще не работает. Zend_Amf - не лучшая библиотека, кроме того, не реализует всех возможностей формата, и очень плохо настраивается. На столько плохо, что легче написать по-новой, чем ее настроить. Это касается бесконечной вереницы класс-лоадеров в Zend и мартышкиными потугами "замутить крутую архитектуру", которая вылилась в 100500 никому не нужных классов... Но, опять же, эта информация вам мало поможет Так вот, если сериализация вообще не работает, значит Zend не находит PHP классы нужные для нее... Комментарии возвращаемого типа нужны, на сколько я знаю, для генерации кода какими-то инструментами Flash Builder'a, на сериализацию они не влияют / их вообще можно не писать. Если вы получаете массив из объектов нужного типа: у вас все работает, как нужно, Vector.<T> появился после того, как был написан AMF3.0 формат, и по-этому пока-что не используется в сериализации (не смотря на то, что некоторые реализации понимают тег #13 - это так бы записывался вектор, если бы он был, но, при этом Флеш плеер оказывает медвежью услугу - он, когда сериализует Vector.<T>, то всегда тип указывает как Vector.<Object>, что, вобщем-то, делает всю идею бесполезной. Поэтому, как говорилось выше - если вам нужен вектор, прийдется его создавать из массива - о целесообразности думайте сами: есть ли смысл расходовать память / так уж ли необходимо быть там вектору?
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 03.09.2011 в 14:12. |
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Страшно становится)))) Вывод на будущее: Zend - в топку?
Писать все руками, и пользоваться чистым AS3? Или все-же какие-то Flex-вкусности и инструменты Builder-а могут быть полезны? |
|
|||||
Modus ponens
|
Ну, смотрите... код сгенеренный в FB может быть полезным в некоторых ситуациях:
- что-то потестировать (просто быстрее сгенерить, чем написать). - для совсем новичков, которые сами не напишут. Но использовать в настоящем работающем приложении... я бы даже не задумывался о такой возможности Что до Zend - я знаком только с Zend_Amf. Это по сути продолжение AMFPHP, которое один из коммитеров решил приладить к Zend, и его поддержали. На первый взгляд, то, что касалось сериализации / общения с клиентом не поменялось, но добавилась куча мусора связанного с Zend фреймворком, ну и ограничения на имена файлов / классов и т.п. Кроме того, из-за того, что нужно было приткнуть "архитектуру" к уже работающей библиотеке, библиотека стала работать хуже В смысле медленнее. Ну и в целом про Flex говорить бы не стал тоже есть и позитивные моменты. Но мое глубокое убеждение, что шаблоны хороши только тогда, когда - точно знаешь какой код из них создается. - есть возможность их поменять, если нужно. Первое достижимо методом проб и ошибок, второе - никак, если мы говорим про Flash Builder... но это, судя по всему идеология разработчиков такая, смысл которой от меня ускользает.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Ясно. А бенчмаркам не верить? http://www.jamesward.com/census2/
|
Часовой пояс GMT +4, время: 19:30. |
|
« Предыдущая тема | Следующая тема » |
|
|