Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.08.2011, 17:53
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 1  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Question из array php в Vector.<T> AS3

Использую Zend Framework.
PHP код:
/**
* @var something_type
*/
public $something
- такая переменная в AS определяется как SomethingType - класс AS, соответствующий something_type,
а вот с такой:
PHP код:
/**
* @var multitype:something_type
*/
public $array_of_something
возникают проблемы. На входе получаем Array, каждый из элементов которого просто Object. А хотелось бы получить Array of SomethingType, а еще лучше Vector.<SomethingType>

Прошу помочь))

Старый 26.08.2011, 00:21
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Просто так не получится, нужно будет реально создавать SomethingType, десериализовать объекты в них и засовывать в Vector.

Старый 26.08.2011, 11:38
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 3  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Вот тут столкнулся с такой неприятностью (пишу не из дома, так что скопипастить код не смогу, пишу на память)
Есть класс SomethingData в AS и соответствующий something_data в пхп. Т-к SomethingData помечен тегом [RemoteClass], то при получении данных, и при условии, что в пхп коде к методу, возвращаемому something_data есть коммент
PHP код:
/** 
* @return something_data 
*/ 
полученный объект определится как SomethingData (Механизм мне не известен). Пусть в классе something_data есть поле something_array, состоящий из объектов something_type (о чем речь шла в первом посте).
В AS классе должна быть паблик переменная или сеттер, именуемая something_array (иначе мы ее не получим). Я пытался сделать преобразование типа через сеттер/геттер, но, т-к у них должен быть одинаковый тип, ничего не вышло. Можно конечно сделать метод getSomethingArray, но мне в этом случае не нравится, что останется либо паблик сеттер, либо просто поле, и я могу руками ковырять массив. Меня это смущает сильно.


Последний раз редактировалось Silicium; 26.08.2011 в 11:40.
Старый 03.09.2011, 03:07
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 4  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
В PHPDoc надо писать array[Something_Type]

Старый 03.09.2011, 14:08
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
[RemoteClass] делает следующее (при чем очень плохо, с попыткой предотвратить конфликты с флексовыми модулями, и там у него просто не получается это сделать, но это отдельная история, вобщем, не используйте его).
Код AS3:
flash.net.registerClassAlias("alias", theClass);
Если вас интересует, как именно он это делает - можете скомпилировать с ключем -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.
Старый 03.09.2011, 14:29
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 6  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Страшно становится)))) Вывод на будущее: Zend - в топку?
Писать все руками, и пользоваться чистым AS3? Или все-же какие-то Flex-вкусности и инструменты Builder-а могут быть полезны?

Старый 03.09.2011, 20:11
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну, смотрите... код сгенеренный в FB может быть полезным в некоторых ситуациях:
- что-то потестировать (просто быстрее сгенерить, чем написать).
- для совсем новичков, которые сами не напишут.
Но использовать в настоящем работающем приложении... я бы даже не задумывался о такой возможности
Что до Zend - я знаком только с Zend_Amf. Это по сути продолжение AMFPHP, которое один из коммитеров решил приладить к Zend, и его поддержали. На первый взгляд, то, что касалось сериализации / общения с клиентом не поменялось, но добавилась куча мусора связанного с Zend фреймворком, ну и ограничения на имена файлов / классов и т.п. Кроме того, из-за того, что нужно было приткнуть "архитектуру" к уже работающей библиотеке, библиотека стала работать хуже В смысле медленнее.
Ну и в целом про Flex говорить бы не стал тоже есть и позитивные моменты. Но мое глубокое убеждение, что шаблоны хороши только тогда, когда
- точно знаешь какой код из них создается.
- есть возможность их поменять, если нужно.
Первое достижимо методом проб и ошибок, второе - никак, если мы говорим про Flash Builder... но это, судя по всему идеология разработчиков такая, смысл которой от меня ускользает.
__________________
Hell is the possibility of sanity

Старый 04.09.2011, 15:23
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 8  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Ясно. А бенчмаркам не верить? http://www.jamesward.com/census2/

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:30.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.