AMFPHP 是一個開源的 PHP 類庫,專門用於實現遠程過程調用(RPC,Remote Procedure Call)。它能讓 PHP 後端與多種前端技術無縫通信,包括:
遠程過程調用(RPC)是一種客戶端與服務端交換數據的方式。開發者可以像調用本地方法一樣,直接呼叫遠端服務的方法、傳遞參數並接收返回結果,而無需關心底層的數據序列化、網絡傳輸與反序列化細節——這些複雜過程由框架自動完成。
gateway.php。AMFPHP 支持複雜數據類型(對象、陣列、資源),甚至能直接返回 mysql_query 資源。若平台支持(如 Flash/Flex Remoting),還能處理循環引用與自定義類別映射。框架內建服務瀏覽器,方便在編寫客戶端代碼前測試服務;1.0.1 版新增代碼生成模板,1.9 beta 更支持 AMF3 協議。
將 amfphp 目錄放入項目根目錄(如 MyTest/amfphp),瀏覽器訪問 https://localhost/MyTest/amfphp/gateway.php 驗證安裝。修改 globals.php 指定服務類目錄:
$servicesPath = "../BusinessLogic/";
Login.php<?php
class Login {
public function doLogin($data) {
$result = array();
try {
$name = array_shift($data);
$pwd = array_shift($data);
if ($name === "phinecos" && $pwd === "123") {
$result[] = "1";
$result[] = "you are valid user!";
} else {
$result[] = "0";
$result[] = "login failed";
}
} catch (Exception $ex) {
$result[] = "-1";
$result[] = $ex->getMessage();
}
return $result;
}
}
?>
import mx.controls.Alert;
import mx.rpc.remoting.mxml.RemoteObject;
import mx.rpc.events.*;
public var login_remoteObj:RemoteObject;
public function initLoginRemoteObject():void {
this.login_remoteObj = new RemoteObject();
this.login_remoteObj.source = "Login";
this.login_remoteObj.destination = "amfphp";
this.login_remoteObj.showBusyCursor = true;
this.login_remoteObj.endpoint = "https://localhost/MyTest/amfphp/gateway.php";
this.login_remoteObj.doLogin.addEventListener("result", loginHandler);
this.login_remoteObj.doLogin.addEventListener("fault", faultHandler);
}
public function doLogin():void {
var name:String = this.txtName.text;
var pwd:String = this.txtPassword.text;
var data:Array = [name, pwd];
this.login_remoteObj.getOperation("doLogin").send(data);
}
public function loginHandler(event:ResultEvent):void {
var result:Array = event.result as Array;
var flag:String = result[0];
switch(flag) {
case "0": Alert.show("登錄失敗: " + result[1]); break;
case "1": Alert.show("登錄成功: " + result[1]); break;
case "-1": Alert.show("異常: " + result[1]); break;
}
}
public function faultHandler(event:FaultEvent):void {
Alert.show("抱歉,發生錯誤!");
}
AMF3 可大幅減小傳輸體積,提升性能。AMFPHP 讓 PHP 後端與富客戶端(Flex/Flash/Ajax)協作變得極其簡單,是構建 RIA(富互聯網應用)的經典選擇。