php – 构造函数未被SOAP响应对象调用

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 构造函数未被SOAP响应对象调用脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 PHPSOAPClient classSOAP API进行通信.其中一个选项可以让您使用自己的类重新映射WSDL文件中指定的类型:

我创建我的客户端:

$api = new SOAPClient('http://example.COM/soap.wsdl',[
    'location' => 'http://example.com/soap/endpoint','soap_version' => SOAP_1_2,'comPression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,'cache_wsdl' => WSDL_CACHE_BOTH,'classmap' => [
        'APIResultObject' => 'Result'
    ],# TODO: Set for debug only?
    'trace' => TRUE,'exceptions' => TRUE
]);

这样工作,当我调用$api-> method(‘param’)时,我会返回一个Result对象(而不是一个StdClass对象).问题是Result :: __ construct()方法永远不会被调用,所以Result的一些私有属性从不被设置.

以下是结果是:

class DataClass{
    protected $data;

    function __construct(){
        $this->data = ['a' => 0,'b' => 1,'c' => 2];
    }
}

class Result extends DataClass{
    public $value,$name,$quantITy;

    function __construct(array $values){
        parent::__construct();

        foreach(['value','name','quantity'] as $VAR){
            $this->$var = isset($values[$var]) ? $values[$var] : NULL;
        }
    }

    function getData(){
        return $this->data[$this->name];
    }
}

发生了什么,我正在做$api->方法(‘param’) – > getData()并获得以下错误

获取SOAP响应时,如何调用构造函数?我试过使用__wakeup(),但似乎也没有.

附:我用一个小的解决方案“解决了”它,但我不认为它是理想的.这是我做的:

function getData(){
    if($this->data === NULL){
        parent::__construct();
    }

    return $this->data[$this->name];
}
这是已知的行为( bug report).

因为在bug报告中提供了一些建议(在web dot de上的miceleparkip):

分享她的立场

一个错误报告中的后续评论(hotblocks dot nl的PHP)不同意:

虽然从技角度来看这是无可争议的,但“抽象”对象可以在服务器端创建.无论是首先转换为XML,然后在客户端重建,都是低级别的关注,应用层不需要注意.

如果您的应用程序需要具有比服务器提供的功能更多的功能的对象,我将创建一个本地类,该对象将SOAPClient创建的对象作为构造函数参数:

class MySoapResultClass {
    // whatever
}

class LocalApplicationClass {

    public function __construct(MySoapResultClass $soapResult) {

        // your local initialization code
        $this->data = ['a' => 0,'c' => 2];

        // then either extract your data From $soapResult,// or just Store a reference to it
    }

    public function getData(){
        return $this->data[$this->name];
    }
}

$api = new SOAPClient(...);
$soapResult = $api->;method('param');
$myUsefulObject = new LocalApplicationClass($soapResult);

脚本宝典总结

以上是脚本宝典为你收集整理的php – 构造函数未被SOAP响应对象调用全部内容,希望文章能够帮你解决php – 构造函数未被SOAP响应对象调用所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。