如果SOAP连接已经创建,我如何以最简单的方式重用它?
在许多情况下,soap连接函数可以在一个PHP页面加载过程中多次运行,因此如果已经创建了连接,就不需要重新创建,只需要重新使用即可。
(有时它甚至根本不运行,因为不需要它,所以在所有PHP页面的开头调用它会浪费时间。该函数只需要在需要连接时运行。)
我知道这个问题还有其他解决方案(当我在谷歌上搜索时),但我没能理解它们。我尝试了很多方法,但都不适用。我甚至尝试将SOAP对象存储在会话中,这样加载的下一个PHP页面就可以重用SOAP连接(来自以前的PHP加载),但效果不佳。
最好的解决方案是记住浏览器会话中所有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)));
也许您可以尝试使用类而不是函数。当公共函数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();