2016-04-11 4 views
1

SOAP接続がすでに作成されている場合は、どのようにして再利用するのが最も簡単な方法ですか?すでに作成されている場合は、PHP SOAP接続を再利用しますか?

多くの場合、Soap接続機能はPHPページの読み込みを複数回実行できるため、作成した場合は再作成する必要はありません。再利用するだけで済みます。

(時には、それが必要ないので、すべてのPHPページの冒頭でそれを呼び出すのに時間が掛からないため、実行されていないこともあります。

私はこの問題の他の解決策があることを知っていますが(私はそれをGoogleにすると)、私はそれらを理解することはできませんでした。私はたくさんのことを試みたが、彼らは私のために働かなかった。私はセッションにSOAPオブジェクトを格納しようとしても、読み込まれた次のPHPページが(以前のPHPの負荷から)SOAP接続を再利用できるようになりましたが、それはより効きませんでした。

最良の解決策は、ブラウザセッションで読み込まれるすべてのPHPページの接続が記憶されていることです。次にベストな解決策は、現在のPHPページの読み込みのために記憶されていることです。ここで

は私のコードは次のとおりです。

protected static function Economic_API() { 

    static $client; 

    $settingsOld = Settings::GetOld();  

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

更新されたコード:

class EcoAPI { 

static $client; 

static public function getClient() { 

    if (empty(self::$client)) { 
     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_FindByNumber(array('number' => intval($accountID))); 

答えて

2

。接続はクラスインスタンスに存在し、public関数getClient()はアプリケーションがsoapClient接続を使用できるようになります。

class Economic_API { 

    private $client; 
    private $token; 
    private $appToken; 

    public function __construct($token, $appToken){ 
     $this->token = $token; 
     $this->appToken = $appToken; 
    } 

    private function initClient() { 
     $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 
     ));   
    } 

    /** 
     * @returns SoapClient 
     */ 
    public function getClient() { 
     if($this->client === null) { 
      $this->initClient(); 
     } 
     return $this->client; 
    }   
} 
$token = '123'; 
$appToken = "abc" 
$economicApi = new Economic_API($token, $appToken); 

$economicApi->getClient()->YourSoapFunction(); 
+0

初期化を維持します。それは、次の石鹸クライアント呼び出しで石鹸接続を再使用していません。どうして?上記のコードを更新しました。 –

+0

私は静的関数を作ることでそれを修正しました:-) –

関連する問題