2016-04-12 7 views
1

SOAPクライアントが再利用されていない理由を教えていただけますか?それは、最後の呼び出しから再利用されるべき場所で初期化され続ける。作成したSOAPクライアントオブジェクトを再利用していません

SOAPクライアントオブジェクトが初期化された後に印刷されますが、次の呼び出しで忘れられます。

したがって、PHPスクリプトは接続の初期化を続けます。

マイコード:

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));   

} 
} 

私は接続することにより:

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

'client'プロパティを静的にすることができますか?新しいEcoAPIクラスを呼び出すたびに、新しいSOAPクライアントをインスタンス化しているようです。例: '$ result = EcoAPI :: client-> Account_GetVatAccount(...)' –

答えて

1

新しいEcoAPIオブジェクトを作成しているたびに、それがどのSOAPクライアントの情報を持っていません。同じ$ecoApiオブジェクトを注入している限り、コード全体に$ecoApi->getClient()->...を使用してください。

すべてのEcoAPIオブジェクトが同じ接続オブジェクトを持つようにするには、クライアントに静的メソッドを使用してSOAPオブジェクトを操作するようにしてください。

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));   
    } 
} 

との接続:

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

は確かに、私は、静的オブジェクトとメソッドを使用しないことを助言すると、それは密結合につながることができます。私の考えでは、必要に応じてインスタンス化されたオブジェクトを注入するのが最善の方法です。

+0

ありがとうございます - それは働いています:-) –

関連する問題