PHP&Flex - новая альтернатива для создания RIAs Иванников Андрей Улич Дмитрий
Что такое Flex? Adobe Flex 2 – это решение, позволяющее разрабатывать Rich Internet Applications на основе родственной Flash технологии. Описание интерфейса, и не только, основано на диалекте XML – MXML. Описание клиентской логики на ActionScript3 (AS3) В результате MXML->AS3->swf фаил.
Линейка продуктов Flex 2 Flex Builder 2 – IDE основанная на eclipse. Flex framework and SDK Flex Charting 2 Flex Data Services 2
Структура Flex приложений
Пример
MXML ActionScript package{ import mx.controls.Button; public class CustomButton extends Button{ public function CustomButton(){ supper(); }
ActionScript 3 ООП! Основан на стандарте ECMAScript 4. Строгая и динамическая типизация Наследование, интерфейсы, модульность Спецификаторы доступа Reflection API ECMAScript for XML (E4X) DOM3 модель событий Динамические классы (runtime добавление методов и свойств)
Другие аспекты разработки ASDoc – документирование в коде Mercury QuickTest – приемочные тесты FlexUnit – модульные тесты Flex Stress Testing – нагрузочные тесты Cairngorm - архитектурный фреймворк Flex-Ajax Bridge – AS JS Apollo - desktop приложения
Из рубрики Лучше один раз увидеть, чем сто раз услышать! Смотрим и про себя думаем, как бы мы все это сделали на JS?! %)
HTML&JavaScript vs MXML&ActionScript JSAS Кросбраузерность Функционал языка Распространенность Размер приложений Индексация в поисковиках Скорость разработки RIAs Производительность - + +/
Обмен данными Использовать фреймворки, которые сериализуют данные в формат AMF SOAP запросы Сокеты (в том числе и бинарные) Просто использовать GET и POST запросы
Реализована поддержка AMF PHP JAVA.NET ColdFusion Ruby
Фреймворки для связки PHP и Flex AMFPHP WEBORB SabreAMF
Общее Поддержка AMF3 Сопоставление классов (class mapping) между Flex и PHP Поддержка PHP5
Сравнение AMFPHPWEBORBSabreAMF Поддержка PHP4+-- Авторизация++- Документация--- Простота установки++- Ведение логов++- php_amf_extension+-- Браузер для служб+--
Flex
services-config.xml *
PHP class Users { public function getUsers(){ $users = array(); $query = mysql_query("select * from users"); while ($row = mysql_fetch_object($query)){ $users[] = $row; } return $users; }
НИЧЕГО!
Class mapping package vo{ [RemoteClass(alias="dummy.vo.UserVO")] public class UserVO{ public var userId:int; public var userName:String; }
class UserVO { public $_explicitType ="dummy.vo.UserVO"; public $userId; public $userName; }
import vo.UserVO; private var user:UserVO; private function createNewUser():void{ var newUser:UserVO = new UserVO(); newUser.userName = uName.text; ro.createNewUser(newUser); }
require_once(vo/UserVO.php); public function getUsers(){ $users = array(); $query = mysql_query("SELECT user_id, user_name FROM users"); while ($row = mysql_fetch_object($query)){ $user = new UserVO(); $user->userId = $row->user_id; $user->username = $row->user_name; $users[] = $user; } return $users; } public function createNewUser (UserVO $newUser){ mysql_query("INSERT INTO users SET user_name = '". $newUser- >userName. "'"); }
Спасибо за внимание! Вопросы