将请求处理到同一PHP SOAP服务器中的多个类

时间:2008-12-05 15:08:07

标签: php web-services soap wsdl

是否可以使用单个PHP SOAP服务器来处理对多个类(服务)的请求?

如果是,请举例说明实施例?

如果没有,你能说出原因吗?

3 个答案:

答案 0 :(得分:2)

你能将其他服务包装在一个类中吗?完全未经测试,这只是一个想法...

class MySoapService
{
  public function __construct()
  {
     $this->_service1 = new Service1();
     $this->_service2 = new Service2();
  }

  // You could probably use __call() here and intercept any calls, 
  //  thus avoiding the need for these declarations in the wrapper class...

  public function add($a, $b)
  {
     return $this->_service1->add($a, $b);
  }

  public function sub($a, $b)
  {
    return $this->_service2->sub($a, $b);
  }
}

class Service1
{
  public function add($a, $b)
  {
    return $a + $b;
  }
}

class Service2
{
  public function sub($a, $b)
  {
    return $a - $b;
  }
}

答案 1 :(得分:0)

另一个关于相同的一般想法(代理类) - 对于php5 使用哈希将函数映射到回调。

class ServiceProxy {
    private $map = array();

    public function addMethod($name, $callback) {
        if(is_callable($callback)) {
            $this->map[$name] = $callback;
            return true;
        }
        return false;
    }      

    function __call($name, $args) {
        if(isset($map[$name])) {
            return call_user_func_array($map[$name], $args);
        } else {
            return null;
        }
    }
}

此类也可以使用反射API并添加来自对象的所有pulic方法,例如。

答案 2 :(得分:0)

如果两个类的方法具有相同的名称(但参数不同),那么您可以使用func_get_args()来分析参数并区分这些方法。

如果他们采取相同的论点......那么你就有点卡住了。

为什么不能只使用两个单独的Web服务?