(PHP 5 >= 5.1.2, PHP 7)
SoapServer::setPersistence — Устанавливает режим сохранения SoapServer
$mode
)Эта функция позволяет изменять режим сохранения объекта SoapServer между запросами. Эта функция позволяет сохранять данные между запросами используя механизм сессий PHP. Этот метод влияет только на SoapServer после экспорта функций используя SoapServer::setClass().
Замечание:
Сохранение
SOAP_PERSISTENCE_SESSION
гарантирует сохранение только объектов заданного класса, но не значение статических полей. Так что используйте $this->bar, а не self::$bar.
Замечание:
SOAP_PERSISTENCE_SESSION
сериализует данные объекта класса и сохраняет их между запросами. Для корректной работы с ресурсами (например PDO), должны использоваться магические методы __wakeup() и __sleep().
mode
Одна из констант SOAP_PERSISTENCE_XXX.
SOAP_PERSISTENCE_REQUEST
- данные SoapServer не сохраняются
между запросами. Это поведение по умолчанию
любого объекта SoapServer после вызова setClass.
SOAP_PERSISTENCE_SESSION
- данные SoapServer сохраняются
между запросами. Это достигается путем сериализации объекта SoapServer в
$_SESSION['_bogus_session_name'], следовательно
необходимо вызвать session_start() перед включением этого режима.
Эта функция не возвращает значения после выполнения.
Пример #1 Пример использования SoapServer::setPersistence()
<?php
class MyFirstPersistentSoapServer {
private $resource; // (Such as PDO, mysqli, etc..)
public $myvar1;
public $myvar2;
public function __construct() {
$this->__wakeup(); // Вызываем __wakeup для пересоздания $resource
}
public function __wakeup() {
$this->resource = CodeToStartOurResourceUp();
}
public function __sleep() {
// Не сохраняем $resource здесь.
// Ошибка в этом методе приведет к тому, что при последующей десериализации
// мы не сможем восстановить состояние объекта.
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 ERROR: ". $e->getMessage());
}
?>