【问题标题】:Advantage of PHP SoapClient classmapPHP SoapClient 类图的优势
【发布时间】:2015-04-22 14:36:47
【问题描述】:

谁能告诉我在 PHP Soapclient 中使用 classmap 选项的优势?也许有一些实际的例子?

【问题讨论】:

    标签: php soap soap-client


    【解决方案1】:

    classmap 选项可用于将某些 WSDL 类型映射到 PHP 类。

    例如,

    class MyLoginResult {
        protected $serverUrl;
        protected $sessionId;
    
        public function getServerUrl()
        {
             return $this->serverUrl;
        }
    
        public function getSessionId()
        {
            return $this->sessionId;
        }
    
        public function getServerInstance()
        {
            $match = preg_match(
                '/https:\/\/(?<instance>[^-]+)\.example\.com/',
                $this->serverUrl,
                $matches
            );
    
            return $matches['instance'];
        }
    }
    
    $client = new SoapClient("books.wsdl", 
                     array('classmap' => array('LoginResult' => "MyLoginResult")));
    
    $loginResult = $client->getLoginResult();
    $instance = $loginResult->getServerInstance();
    

    【讨论】:

      【解决方案2】:

      作为对 hoangthienan 评论的补充,我将展示使用映射类时的另一个优势。

      例如您可以通过 __set() 方法扩展该类,该方法将在 SoapClient 将其数据传递给映射类时触发(您应该知道,如果您的属性是公共的,则不会触发该方法)。

      在这种情况下,您可以在将 SoapClient 传递的数据分配给您的数据类之前对其进行替换。

      class MyLoginResult {
          protected $serverUrl;
          protected $sessionId;
          private $is_logged_in;
      
      
          public function __set($name, $value) {
              if ($name == 'login_status') {
                  $this->is_logged_in = ($value == 'logged_in') ? true : false;            
              } else {
                $this->$name = $value;
              }
          }
      
          public function loginSuccessfull() {
            return $this->is_logged_in;
          }
          // class code from hoangthienan
      }
      

      例如在这个例子中,我们从 Soap 中得到一个字符串,但是我们在我们的类中存储了一个布尔值。 您可以将其用于其他更改,例如如果您想将内部变量存储在数组中而不是使用直接属性。

      【讨论】:

        猜你喜欢
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多