Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";“正常化”;SoapClient中的php对象具有不一致的结构?_Php_Oop - Fatal编程技术网

如何";“正常化”;SoapClient中的php对象具有不一致的结构?

如何";“正常化”;SoapClient中的php对象具有不一致的结构?,php,oop,Php,Oop,我有一个php stdObject,它是一个对象,有时是一个对象数组 编辑:它已由SoapClient::\uu soapCall返回 如果有一个条目: stdClass Object ( [Event] => stdClass Object ( [Nr] => 7050 [Date] => 2016-11-30T00:00:00 ) ) 我的问题是: 相同的请求返回不同的数据类型,这正常吗 如果只有一个

我有一个php stdObject,它是一个对象,有时是一个对象数组

编辑:它已由
SoapClient::\uu soapCall
返回

如果有一个条目:

stdClass Object ( [Event] => stdClass Object ( [Nr] => 7050 [Date] => 2016-11-30T00:00:00 ) ) 我的问题是:

  • 相同的请求返回不同的数据类型,这正常吗
  • 如果只有一个条目,我是否应该对此进行“规范化”并生成一个对象数组
  • 或者有没有其他建议的解决方法

    • 我认为在这种情况下不合适。您应该保持界面不变。因此,如果您期望未知数量的元素,它应该始终是一个集合,即使在某些情况下只返回一个元素。但是,如果只需要一个元素,则应该忽略集合

      $this->getAll(); //should always return a collection
      $this->getOneById($id); //should return single item without collection, return null or throw exception if no element is found
      

      关于你应该“规范化”(重构)这个问题,我想说这取决于你的工作量估计和你从重构中获得的好处。如果这种情况只发生在少数几个地方,而且将来不太可能在任何其他地方使用,我想你不应该麻烦。如果您决定重构,请非常小心,确保整个应用程序正常工作。如果你有测试-很好。

      我认为在这种情况下不合适。您应该保持界面不变。因此,如果您期望未知数量的元素,它应该始终是一个集合,即使在某些情况下只返回一个元素。但是,如果只需要一个元素,则应该忽略集合

      $this->getAll(); //should always return a collection
      $this->getOneById($id); //should return single item without collection, return null or throw exception if no element is found
      

      关于你应该“规范化”(重构)这个问题,我想说这取决于你的工作量估计和你从重构中获得的好处。如果这种情况只发生在少数几个地方,而且将来不太可能在任何其他地方使用,我想你不应该麻烦。如果您决定重构,请非常小心,确保整个应用程序正常工作。如果您有测试-很好。

      我没有在问题中声明它,抱歉:数据是soap客户端调用的结果:

       $this->soapClient = new \SoapClient($wsdlUrl, array('trace' => DEBUG_SOAP));
       // ...
       $result = $this->soapClient->__soapCall($method, array($method => $params));
      
      我想让我困惑的是
      SoapClient::\uu soapCall

      SOAP函数可以返回一个或多个值。如果只有一个值 是由SOAP函数返回的,\ uuu soapCall的返回值将 是一个简单的值(例如整数、字符串等)。如果有多个值 返回时,\uuuu soapCall将返回一个名为 输出参数

      还有一个非常类似的问题:

      这里有两个解决方案:

      “正常化”(正确的词是什么?)我们得到数据后:

      if (is_object($variable)){
          $variable = array($variable);
      }
      

      而且,这相当于在我们得到请求之前重构请求–有一个soapClient设置

      $soapConfig = array(
          'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
          'trace'    => true
      );
      $client = new SoapClient($wsdlUrl, $soapConfig);
      


      太棒了

      我没有在问题中声明,抱歉:数据是soap客户端调用的结果:

       $this->soapClient = new \SoapClient($wsdlUrl, array('trace' => DEBUG_SOAP));
       // ...
       $result = $this->soapClient->__soapCall($method, array($method => $params));
      
      我想让我困惑的是
      SoapClient::\uu soapCall

      SOAP函数可以返回一个或多个值。如果只有一个值 是由SOAP函数返回的,\ uuu soapCall的返回值将 是一个简单的值(例如整数、字符串等)。如果有多个值 返回时,\uuuu soapCall将返回一个名为 输出参数

      还有一个非常类似的问题:

      这里有两个解决方案:

      “正常化”(正确的词是什么?)我们得到数据后:

      if (is_object($variable)){
          $variable = array($variable);
      }
      

      而且,这相当于在我们得到请求之前重构请求–有一个soapClient设置

      $soapConfig = array(
          'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
          'trace'    => true
      );
      $client = new SoapClient($wsdlUrl, $soapConfig);
      


      太棒了

      我认为这很正常,取决于你的数据来源。通常,如果请求了多个项,则应返回一个项集合,但如果只指定了一个项,则跳过该集合。如果数据源是某种外包端点,那么同一请求可能会根据参数生成不同类型的对象。也就是说,
      GET/store
      可能返回所有存储项,而
      GET/store/1
      将返回id为1的单个项。不一致?我认为“不一致”是一个更好的词我认为这很正常,取决于你的数据来源。通常,如果请求了多个项,则应返回一个项集合,但如果只指定了一个项,则跳过该集合。如果数据源是某种外包端点,那么同一请求可能会根据参数生成不同类型的对象。也就是说,
      GET/store
      可能返回所有存储项,而
      GET/store/1
      将返回id为1的单个项。不一致?我认为“不一致”是一个更好的词谢谢你的反馈!我已经更详细地了解了我从何处获得这些数据,并将其添加为答案答案答案是正确的——这不好。我的SOAP客户端特例的解决方案在我自己的回答中。谢谢您的反馈!我已经更详细地了解了我从何处获得这些数据,并将其添加为答案答案答案是正确的——这不好。我对SOAP客户机的特殊情况的解决方案在我自己的答案中