4

是否有可能拥有一个 PHP SOAP 服务器来处理对多个类(服务)的请求?

如果是,您能否展示一个示例实现?

如果不是,您能描述一下原因吗?

4

3 回答 3

2

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

MySoapService 类
{
  公共函数 __construct()
  {
     $this->_service1 = new Service1();
     $this->_service2 = new Service2();
  }

  // 你可以在这里使用 __call() 并拦截任何调用,
  // 从而避免在包装类中需要这些声明...

  公共函数 add($a, $b)
  {
     返回 $this->_service1->add($a, $b);
  }

  公共函数子($a,$b)
  {
    返回 $this->_service2->sub($a, $b);
  }
}

服务1类
{
  公共函数 add($a, $b)
  {
    返回 $a + $b;
  }
}

服务类 2
{
  公共函数子($a,$b)
  {
    返回 $a - $b;
  }
}
于 2008-12-05T15:36:21.580 回答
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 并添加来自对象的所有公共方法。

于 2008-12-06T18:26:56.553 回答
0

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

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

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

于 2008-12-08T14:46:57.043 回答