(PHP 5, PHP 7, PHP 8)
SoapServer::setPersistence — Activa el modo persistente de SoapServer
Esta función permite cambiar la persistencia de un objeto SoapServer entre las peticiones. Permite guardar los datos entre las peticiones, mediante las sesiones PHP. Esta función solo tiene efecto después de haber exportado la lista de funciones mediante SoapServer::setClass().
Nota:
La constante de persistencia
SOAP_PERSISTENCE_SESSION
hace persistentes únicamente los objetos de la clase dada, pero no los datos estáticos. En este caso, $this->bar en lugar de self::$bar.
Nota:
SOAP_PERSISTENCE_SESSION
serializa los datos del objeto entre las peticiones. En el caso de los recursos (por ejemplo PDO), __wakeup() y __sleep() deben ser utilizadas.
mode
Una de las constantes SOAP_PERSISTENCE_*
.
SOAP_PERSISTENCE_REQUEST
- Los datos de SoapServer
no son persistentes entre las peticiones. Este es el comportamiento por
omisión de todo objeto SoapServer después
de llamar a setClass().
SOAP_PERSISTENCE_SESSION
- Los datos de SoapServer
persisten entre las peticiones. Esto se realiza serializando los datos de
la clase SoapServer en $_SESSION['_bogus_session_name'],
por lo que session_start() debe ser llamada antes de pasar
a este modo de persistencia.
No devuelve ningún valor.
Ejemplo #1 Ejemplo SoapServer::setPersistence()
<?php
class MyFirstPersistentSoapServer {
private $resource; // (Por ejemplo PDO, mysqli, etc..)
public $myvar1;
public $myvar2;
public function __construct() {
$this->__wakeup(); // Se llama a nuestro wakeup para reiniciar nuestro recurso
}
public function __wakeup() {
$this->resource = CodeToStartOurResourceUp();
}
public function __sleep() {
// Se asegura de eliminar $resource aquí, así nuestros datos pueden persistir en sesión
// Si se olvida, la deserialización en la próxima petición fallará y nuestro objeto
// SoapObject no será persistente entre las peticiones.
return array('myvar1','myvar2');
}
}
try {
session_start();
$server = new SoapServer(null, array('uri' => $_SERVER['REQUEST_URI']));
$server->setClass('MyFirstPersistentSoapServer');
// setPersistence() DEBE ser llamada después de setClass(), ya que el comportamiento de setClass()
// afecta SESSION_PERSISTENCE_REQUEST.
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
} catch(SoapFault $e) {
error_log("SOAP ERROR: ". $e->getMessage());
}
?>