2008-12-05 2 views
4

Возможно ли иметь один сервер SOAP PHP, который будет обрабатывать запросы к нескольким классам (услугам)?Обрабатывать запросы нескольким классам на одном сервере SOAP PHP

Если да, не могли бы вы показать пример реализации?

Если нет, не могли бы вы объяснить, почему?

ответ

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; 
    } 
} 
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 отражения и, например, добавлять все импульсные методы из объекта.

0

Если у обоих классов были методы с одинаковыми именами (но разными параметрами), вы можете использовать func_get_args() для анализа аргументов и различения методов таким образом.

Если они принимают те же аргументы ... тогда вы застряли.

Почему вы не можете использовать только два отдельных веб-сервиса?

Смежные вопросы