Php 未重用创建的SOAP客户端对象
谁能告诉我为什么SOAP客户端没有被重用?它在上次调用时应该重用的地方不断初始化 当我在SOAP客户机对象初始化后打印出它时,它就在那里,但在下一次调用时它被遗忘了 因此php脚本一直在初始化连接 我的代码:Php 未重用创建的SOAP客户端对象,php,class,soap,Php,Class,Soap,谁能告诉我为什么SOAP客户端没有被重用?它在上次调用时应该重用的地方不断初始化 当我在SOAP客户机对象初始化后打印出它时,它就在那里,但在下一次调用时它被遗忘了 因此php脚本一直在初始化连接 我的代码: class EcoAPI { private $client; public function getClient() { if (empty($this->client)) { echo "<br>initializing...";
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对象时,它都不会包含任何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));
}
}
诚然,我建议不要使用静态对象和方法,这样会导致紧密耦合。在我看来,最好的方法是根据需要注入实例化对象。您可以尝试将
客户端
属性设置为静态吗?听起来好像每次调用新的EcoAPI类时都在实例化一个新的SOAP客户机。例如:$result=EcoAPI::client->Account\u GetVatAccount(…)
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)));