是否有可能拥有一个 PHP SOAP 服务器来处理对多个类(服务)的请求?
如果是,您能否展示一个示例实现?
如果不是,您能描述一下原因吗?
您可以将其他服务包装在一个类中吗?完全未经测试,这只是一个想法......
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; } }
另一个采用相同的一般想法(代理类) - 对于 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 并添加来自对象的所有公共方法。
如果两个类的方法名称相同(但参数不同),那么您可以使用 func_get_args() 来分析参数并以这种方式区分方法。
如果他们采取相同的论点......那么你有点卡住了。
为什么不能只使用两个单独的 Web 服务?