(PHP 5 >= 5.1.2, PHP 7)
SoapServer::setPersistence — Establece el modo de persistencia de SoapServer
$mode
)Esta función permite cambiar el estado de persistencia de un objeto SoapServer entre peticiones. Esta función permite guardar datos entre peticiones usando sesiones de PHP. Este método solamente tiene efecto en un SoapServer después de exportar funciones utilizando SoapServer::setClass().
Nota:
La persistencia de
SOAP_PERSISTENCE_SESSION
solamente hace persistentes a los objetos de la clase dad, no los datos estáticos de la clase. En este caso, use $this->bar en lugar de self::$bar.
Nota:
SOAP_PERSISTENCE_SESSION
serializa datos en el objeto de clase entre peticiones. Para poder adecuadamente utilizar recursos (p.ej. PDO), deberían usarse los métodos mágicos __wakeup() y __sleep().
mode
Una de las constantes SOAP_PERSISTENCE_XXX.
SOAP_PERSISTENCE_REQUEST
- Los datos de SoapServer no persisten entre
peticiones. Este es el comportamiento predeterminado de cualquier objeto
SoapServer después de llamar a setClass.
SOAP_PERSISTENCE_SESSION
- Los datos de SoapServer persisten entre peticiones.
Esto se lleva a cabo serializando los datos de la clase SoapServer en
$_SESSION['_nombre_sesión_falso'], ya que
session_start() debe invocarse antes de establecer este modo de persistencia.
No devuelve ningún valor.
Ejemplo #1 Ejemplo de SoapServer::setPersistence()
<?php
class MyFirstPersistentSoapServer {
private $resource; // (Tal como PDO, mysqli, etc..)
public $mivar1;
public $mivar2;
public function __construct() {
$this->__wakeup(); // Estamos llamando nuestro wakeup para manejar nuestro recurso
}
public function __wakeup() {
$this->resource = CodeToStartOurResourceUp();
}
public function __sleep() {
// Nos aseguramos de omitir $resource aquí, por lo que nuestro datos de sesión persisten
// Un fallo resultará en el fallo durante la deserialilzación de datos
// en la próxima petición; por lo tanto, nuestro SoapObject no sería persistente entre peticiones.
return array('mivar1','mivar2');
}
}
try {
session_start();
$server = new SoapServer(null, array('uri' => $_SERVER['REQUEST_URI']));
$server->setClass('MyFirstPersistentSoapServer');
// setPersistence DEBE invocarse después de setClass, debido a que el comportamiento
// de setClass establece SESSION_PERSISTENCE_REQUEST tras promulgar el método.
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
} catch(SoapFault $e) {
error_log("SOAP ERROR: ". $e->getMessage());
}
?>