(PHP 5 >= 5.1.2, PHP 7)
SoapServer::setPersistence — Active le mode persistant de SoapServer
$mode
)Cette fonction permet de changer la persistance d'un objet SoapServer entre les requêtes. Elle permet de sauvegarder les données entre les requêtes, au moyen des sessions PHP. Cette fonction n'a d'effet qu'après avoir exporté la liste des fonctions au moyen de SoapServer::setClass().
Note:
La constante de persistence
SOAP_PERSISTENCE_SESSION
rend uniquement les objets de la classe donnée persistants, mais non pas les données statiques. Dans ce cas, $this->bar au lieu de self::$bar.
Note:
SOAP_PERSISTENCE_SESSION
serialise les données de l'objet entre les requêtes. Dans le cas des ressources, (par exemple PDO), __wakeup() et __sleep() devraient être utilisées.
mode
Une des constantes suivantes :
SOAP_PERSISTENCE_REQUEST
- Les données de SoapServer
ne sont pas persistantes entre les requêtes. C'est le comportement par
défaut de tout objet SoapServer après
appel à setClass().
SOAP_PERSISTENCE_SESSION
- Les données de SoapServer
persistent entre les requêtes. Ceci est réalisé en linéarisant les données de
la classe SoapServer dans $_SESSION['_bogus_session_name'],
et ainsi session_start() doit être appelée avant de passer
sous ce mode de persistance.
Aucune valeur n'est retournée.
Exemple #1 Exemple SoapServer::setPersistence()
<?php
class MyFirstPersistentSoapServer {
private $resource; // (Par exemple PDO, mysqli, etc..)
public $myvar1;
public $myvar2;
public function __construct() {
$this->__wakeup(); // On appelle notre wakeup pour relancer notre ressource
}
public function __wakeup() {
$this->resource = CodeToStartOurResourceUp();
}
public function __sleep() {
// On s'assure d'enlever $resource ici, ainsi nos données peuvent persister en session
// Si on oublie, la désérialisation lors de la prochaine requête échouera et notre objet
// SoapObject ne sera donc pas persistant entre les requêtes.
return array('myvar1','myvar2');
}
}
try {
session_start();
$server = new SoapServer(null, array('uri' => $_SERVER['REQUEST_URI']));
$server->setClass('MyFirstPersistentSoapServer');
// setPersistence() DOIT être appelée après setClass(), car le comportement de setClass()
// affecte SESSION_PERSISTENCE_REQUEST.
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
} catch(SoapFault $e) {
error_log("SOAP ERROR: ". $e->getMessage());
}
?>