代码之家  ›  专栏  ›  技术社区  ›  Bob's Jellyfish

使用SoapClient的类结构

  •  0
  • Bob's Jellyfish  · 技术社区  · 11 年前

    这是一个简化的 我知道下面的代码并不完全干净,但用于测试

    代码1:

    <?PHP
    abstract class webservice
    {
        protected  $url;    
        var $clientSoap;
    
        public function  affectation_base($url_p)
        {
            ini_set('soap.wsdl_cache_enabled',0);
            ini_set('soap.wsdl_cache_ttl',0);
    
            $this->url=$url_p;
            $clientSoap = new SoapClient('wdsl_adress');
        }
    
        public function get_fonction()
        {
            $clientSOAP = new SoapClient('wdsl_adress');
            $sestruct = new stdClass();
            $sestruct->value = "test";
            var_dump($clientSOAP->MD5($sestruct));
        }
        abstract protected function getValue();
    }
    
    
    
    class Webservice_2 extends webservice
    {
      public function __construct($url_p)
      {
       $this->affectation_base($url_p); 
      }
      function getValue()
      {} 
    }
    
    $wbs = new Webservice_2('wdsl_adress');  
    $wbs->getValue();
    $wbs->get_fonction();
    ?>
    

    代码2:

    <?PHP
    abstract class webservice
    {
        protected  $url;    
        var $clientSoap;
    
        public function  affectation_base($url_p)
        {
            ini_set('soap.wsdl_cache_enabled',0);
            ini_set('soap.wsdl_cache_ttl',0);
    
            $this->url=$url_p;
            $clientSoap = new SoapClient('wdsl_adress');
        }
    
        public function get_fonction()
        {
            $sestruct = new stdClass();
            $sestruct->value = "test";
            var_dump($clientSOAP->MD5($sestruct));
        }
        abstract protected function getValue();
    }
    
    
    
    class Webservice_2 extends webservice
    {
      public function __construct($url_p)
      {
       $this->affectation_base($url_p); 
      }
      function getValue()
      {} 
    }
    
    $wbs = new Webservice_2('wdsl_adress');  
    $wbs->getValue();
    $wbs->get_fonction();
    ?>
    

    “Code1”有效

    “代码2”不起作用:

    PHP致命错误:在E:\test.PHP的第20行对非对象调用成员函数MD5()

    第20行是 var_dump(); 线

    我不明白为什么要使用 $clientSOAP->MD5 是个问题 正确的解决方案是什么? 提前谢谢

    附言:对不起,如果我英语说得很好,这不是我的语言

    1 回复  |  直到 11 年前
        1
  •  1
  •   Mikaël DELSOL    11 年前

    数字2的正确代码是:

    public function get_fonction()
    {
        $sestruct = new stdClass();
        $sestruct->value = "test";
        var_dump($this->clientSOAP->MD5($sestruct));
    }
    

    因为 $clientSOAP 变量未定义为代码n°1中的变量