オブジェクトの受け渡し
ここで、後まわしにしたオブジェクトの受け渡しについて説明します。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ドキュメントにアクセスするための機能を提供しています。

