Php 未重用创建的SOAP客户端对象

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...";

谁能告诉我为什么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对象时,它都不会包含任何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)));