視業務複雜度而定:
SoapServer 暴露類方法,無需額外封裝層。soap:Fault)。class SoapEntryPoint {
public function __call($method, $args) {
try {
// 1. 驗證 SOAP Header
$this->validateHeader();
// 2. 實例化業務服務
$service = new BusinessService();
// 3. 調用並返回
return $service->$method(...$args);
} catch (ValidationException $e) {
throw new SoapFault('Client', $e->getMessage());
} catch (Exception $e) {
error_log($e);
throw new SoapFault('Server', 'Internal error');
}
}
}
$server = new SoapServer('service.wsdl', ['cache_wsdl' => WSDL_CACHE_MEMORY]);
$server->setObject(new SoapEntryPoint());
$server->handle();