我們要使用session之前必須先呼叫session_start()函數,而要儲存物件到session也有一個先決條件,就是該物件的類別必須在session_start之前就已經存在,也就是說該物件的類別必須在session_start之前就先引入,否則存到session裡的物件就會是 __PHP_Incomplete_Class Object這類型的物件。
原因也很好理解,因為物件本來就是透過class的定義而實作的,session雖然可以跨頁儲存資料,但對於物件類型的變數而言,也僅能儲存屬性的部份,方法的部份仍舊需要有類別的定義,就好像我們可以將函數名稱指定給session,但一樣還是需要在函數已經引入的時候才能利用變數函數的方式來呼叫該函數。
除了上述條件之外,要成功將物件儲存到session也可以透過定義spl_autoload,建立自動引入類別的機制。詳細的autoload作法可參考下列網址。
http://tw2.php.net/manual/en/function.spl-autoload.php
function myfunc(){
………
}
$_SESSION[‘func’]=’myfunc’;
$_SESSION[‘func’]();
變數函數的方式