Luar's Flash Playground:AMFPHP在Persistent Layer探索
新聞(101)
觀點或評論(94)
Flash書(63)
教程(73)
Design Patterns(3)
FlashCom筆記(47)
Flash Remoting筆記(27)
Flex筆記(11)
Flash Lite筆記(14)
PHP資訊(23)
Ajax筆記(9)
習作(51)
組件(17)
酷站(32)
學習資源(28)
書籍推介(15)
本站與我(91)
RSS瀏覽器
聯絡
熱愛鑽研
Ajax
ActionScript
Flash
Flash Lite
Flex
Flash Remoting
FlashCom
Director
Lingo
PHP
Multiplayer Game

搜尋
VCASMO
AMFPHP在Persistent Layer探索 (28-05-2005)

首先先強調一點:Flash Remoting使用HTTP,HTTP是一個Stateless Protocol,所以它不會記住之前的東西,所以有人以為可以這樣做:

class test {
  function test() {
    // Method Table從略...
  }
  function setVar($value) {
    $this->myVar = $value;
  }
  function getVar() {
    return $this->myVar;
  }
}
先用setVar儲下數值後,之後可以用getVar取回數值,是沒有可能的;因為每Call一次Method,一個新Object Instance是會產生

正常做法,當然是利用Session,AMFPHP 1.0開始,第一次連接一個Class時,已經自動處理了Session,不用再用session_start()。另外,在一個純Flash應用中,不用擔心Flash處理不到Session,當包著SWF的HTML(PHP)載入時,Session已經可以產生(假設Cookie沒有被Disabled)。當PHP通過AMFPHP找不到Session時,它才會產生新的Session(例如Cookie被Disabled),SessionID會通過URL去傳送,所以連去Remoting Gateway時,在NetConnection Debugger,可以看到:
...gateway.php?PHPSESSID=6362...

回到正題,可以使用Session保持Persistence時,例如:

class test {
  function test() {
    // Method Table從略...
  }
  function setVar($value) {
    $_SESSION['myVar'] = $value;
  }
  function getVar() {
    return $_SESSION['myVar'];
  }
}
我發現一個奇怪的現象,如果一個Session Value在Constructor時已經產生,例如:
class test {
  function test() {
    // Method Table從略...
    $_SESSION['myVar'] = "constructor";
  }
  function setVar($value) {
    $_SESSION['myVar'] = $value;
  }
  function getVar() {
    return $_SESSION['myVar'];
  }
}
setVar無法覆蓋該Session Value,getVar傳回的結果是"constructor",有誰知道為什麼?
(原因已經知道,自己真蠢,哈哈,前面已經解釋了)

Persistence有了點小小的眉目,下一步就是想想怎樣做O/R Mapping...

P.S. 發現Openamf有一個有趣範例,它的Persistence是怎樣實現?Add Person後,關閉Browser,再打開,搜尋該記錄,仍然存在!(沒有用Database)

其他參考資料

  • Hibernate - Hibernate is a powerful, ultra-high performance object/relational persistence and query service for Java. Hibernate lets you develop persistent classes following common Java idiom - including association, inheritance, polymorphism, composition and the Java collections framework. The Hibernate Query Language, designed as a minimal object-oriented extension to SQL, provides an elegant bridge between the object and relational worlds. Hibernate also allows you to express queries using native SQL or Java-based Criteria and Example queries.
  • Propel - Propel is a full-service object persistence and query toolkit for PHP. It allows you to access your database using a set of objects, providing a simple API for storing and querying data. You might already have heard of this technique, but under a different name, like Data Access Objects (DAO) or Object Relational Mapping (ORM).
  • PHPObject - With PHPObject, you can call a method of a PHP class/library on your web server as if the class/library was defined in Flash itself. It takes care of your client-server connections and makes passing of variables (properties) between Flash MX and PHP easy, and thereby providing a convenient way to connect rich media clients with data and business logic residing on your server.

本文章由發表。
意見
  • 我从上面的范例网址去测试了,并没有出现你说的问题啊,关闭浏览器再打开,就不存在任何记录了。

    如果没有用 DB ,可能也是使用了 SESSION 吧,因为它的 gateway 也是发送 JSESSIONID=F17A6EEA8AB66171E4A76F60D2BF8D2A 的,完全可以用 SESSION 解决啊,只要不超时。

    至于你的前面的问题,我想原因是因为你的代码写错了吧,你在 $_SESSION['myVar']; = $value;
    变量后面加了一个 分号,:)当然不会继续执行了,我奇怪的是竟然没有出错。

    SXPCrazy於28-05-2005發表

  • 當然不是;的問題,我已經知道原因

    luar於28-05-2005發表

  • Persistence意義不是這個,是指應用程式關閉之後,除新啟動,仍能夠將當初Object Graph還原~

    由Eric於28-05-2005發表

  • OpenAMF那个问题是用了Java的Static变量吧
    只要服务器不重启数据就可以一直保存

    由creese於30-08-2005發表

同組文章

Movable Type 4.32-en系統支持,Luar's Production版權所有。