オブジェクトの受け渡し
ここで、後まわしにしたオブジェクトの受け渡しについて説明します。FlashとPHPとの間でデータをやりとりするのに、一番簡単なのは文字列を利用する方法です。この場合には渡す方も(リスト4の(1-6))受け取る方(リスト6)も、そのまま文字列を指定してやればうまくいきます。一方で、構造を持ったオブジェクトをやりとりする場合、Flash側のどのクラスがPHP側のどのクラスに対応するかを明示する必要があります。そのためのメソッドがZend_Amf_Server
クラスのsetClassMap
メソッドです(リスト5の(3-6))。
今回のサンプルではFlash側のDataAS
クラスとPHP側のDataPHP
クラスが対応しています。どちらのクラスもパブリックにアクセス可能なメンバー変数data
を持ちます。DataAS
クラスはリスト7のように定義されています。
package { [Bindable] [RemoteClass(alias="DataAS")] public class DataAS { public var data:String; } }
このうちBindable
タグは、このクラスが外部のシステムのオブジェクトと関連付けられる可能性があることを示しています(この指定を行うと、このオブジェクトの値に変更が生じた場合にイベントが発生します)。また、RemoteClass
タグによって、このクラス外部にオブジェクトを持てることを指定し、対外的には「DataAS
」と名乗ることを指定しています。
このDataAS
クラスに対応するPHP側のクラスDataPHP
はリスト8のように定義されています。
<?php class DataPHP { public $data; }
このように対応するクラスをおのおの定義しておき(リスト7と8)、setClassMap
で対応関係(リスト5の(3-6))を指定することで、FlashとPHPの間でオブジェクトのやりとりができます。
おわりに
今回はZend FrameworkとFlashとの通信を担当するモジュール、Zend_Amfについての解説を行いました。「Flash内ではイベントに応じてAMFでリクエストするだけ」「Zend Framework側ではZend_Amf_Serverにメソッドを登録してhandle
メソッドを呼ぶだけ」と、手軽に通信が行えることがお分かりいただけると思います。
次回はZend_Domについて取り上げたいと思います。Zend_DomはDOMドキュメントを扱うためのモジュールで、現在のところはCSSセレクタによってDOMドキュメントにアクセスするための機能を提供しています。