Обрабатывать запросы к нескольким классам на одном сервере PHP SOAP - PullRequest
4 голосов
/ 05 декабря 2008

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

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

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

Ответы [ 3 ]

2 голосов
/ 05 декабря 2008

Не могли бы вы объединить другие услуги в одном классе? Полностью непроверенный, это была просто мысль ...

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 голосов
/ 08 декабря 2008

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

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

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

0 голосов
/ 06 декабря 2008

Еще один взгляд на ту же общую идею (класс прокси) - для 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 из объекта, например.

...