<?php
class MyFirstPersistentSoapServer {
private $resource; // (例如 PDO、mysqli 等)
public $myvar1;
public $myvar2;
public function __construct() {
$this->__wakeup(); // 我們呼叫 wakeup 來處理啟動我們的資源
}
public function __wakeup() {
$this->resource = CodeToStartOurResourceUp();
}
public function __sleep() {
// 我們在這裡確保排除 $resource,以便我們的會話資料保持持續性
// 如果不這樣做,將導致在下一個請求中還原序列化資料時失敗;
// 因此,我們的 SoapObject 將不會在請求之間保持持續性。
return array('myvar1','myvar2');
}
}
try {
session_start();
$server = new SoapServer(null, array('uri' => $_SERVER['REQUEST_URI']));
$server->setClass('MyFirstPersistentSoapServer');
// setPersistence 必須在 setClass 之後呼叫,因為 setClass 的
// 行為會在執行方法時設定 SESSION_PERSISTENCE_REQUEST。
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
} catch(SoapFault $e) {
error_log("SOAP 錯誤: ". $e->getMessage());
}
?>