2016-04-12 4 views
1

Kann mir jemand sagen, warum der SOAP-Client nicht wiederverwendet wird? Es wird immer dort initialisiert, wo es vom letzten Aufruf wiederverwendet werden sollte.Verwendet das erstellte SOAP-Clientobjekt nicht erneut

Wenn ich das SOAP-Client-Objekt nach der Initialisierung ausgedruckt habe, ist es dort, aber es wird beim nächsten Aufruf vergessen.

Also das PHP-Skript hält die Verbindung initialisieren.

Mein Code:

class EcoAPI { 

private $client; 

public function getClient() { 

    if (empty($this->client)) { 
     echo "<br>initializing..."; 
     $this->initClient(); 
    } 

    return $this->client; 
} 

private function initClient() { 

    $settingsOld = Settings::GetOld(); 
    $this->client = new SoapClient("https://api.e-conomic.com/secure/api1/EconomicWebservice.asmx?WSDL", array("trace" => 1, "exceptions" => 1)); 
    $this->client->ConnectWithToken(array('token' => $settingsOld->economic_token_secret, 'appToken' => $settingsOld->economic_token_app));   

} 
} 

Ich verbinde mit:

$ecoApi = new EcoAPI();  
$result = $ecoApi->getClient()->Account_GetVatAccount(array('accountHandle' => (object) array('Number' => (string) $VatAccount))); 
+0

Sie könnten versuchen, die Eigenschaft 'client' statisch zu machen? Es scheint, als ob Sie jedes Mal, wenn Sie eine neue EcoAPI-Klasse aufrufen, einen neuen SOAP-Client instanziieren. Bsp .: '$ result = EcoAPI :: client-> Account_GetVatAccount (...)' –

Antwort

1

Jedes Mal, wenn ein neues EcoAPI Objekt erstellen, wird es keine SOAP-Client-Informationen. Die Verwendung von $ecoApi->getClient()->... in Ihrem Code sollte funktionieren, solange Sie das gleiche $ecoApi Objekt verwenden.

Wenn Sie sicherstellen möchten, dass jedes EcoAPI-Objekt das gleiche Verbindungsobjekt hat, egal wie, können Sie versuchen, den Client zu einer statischen Eigenschaft mit statischen Methoden zu machen, um das SOAP-Objekt zu manipulieren.

class EcoAPI { 

    static private $client; 

    static public function getClient() { 
     if (empty(self::$client)) { 
      echo "<br>initializing..."; 
      self::initClient(); 
     } 
     return self::$client; 
    } 

    static private function initClient() { 
     $settingsOld = Settings::GetOld(); 
     self::$client = new SoapClient("https://api.e-conomic.com/secure/api1/EconomicWebservice.asmx?WSDL", array("trace" => 1, "exceptions" => 1)); 
     self::$client->ConnectWithToken(array('token' => $settingsOld->economic_token_secret, 'appToken' => $settingsOld->economic_token_app));   
    } 
} 

Und verbinden von:

$result = EcoAPI::getClient()->Account_GetVatAccount(array('accountHandle' => (object) array('Number' => (string) $VatAccount))); 

Zugegeben, ich würde gegen die Verwendung von statischen Objekten und Methoden beraten, und es kann zu enge Kopplung führen. Die beste Methode ist meiner Meinung nach das Injizieren Ihrer instanziierten Objekte nach Bedarf.

+0

Danke - es funktioniert :-) –

Verwandte Themen