Aynı PHP SOAP sunucu içinde çeşitli sınıflar için isteklerini işleyebilir

3 Cevap php

Bu çeşitli sınıflar (hizmetler) için isteklerini idare edecek tek bir PHP SOAP sunucusuna sahip olmak mümkün mü?

Eğer evet ise, size bir örnek uygulanmasını göstermek misiniz?

Değilse, neden tarif misiniz?

3 Cevap

Eğer tek bir sınıfta diğer hizmetler sarabilirdiniz? Tamamen denenmemiş, sadece bir fikirdi ...

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;
  }
}

Another take on the same general idea (proxy class) - for php5 Uses a hash to map functions to callbacks.

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;
        }
    }
}

Bu sınıf ayrıca yansıma API kullanın ve örneğin, bir nesneden tüm pulic yöntemleri ekleyebilirsiniz.

Iki sınıfları aynı adları (ancak farklı parametrelerle) yöntemleri ile olsaydı o zaman () argümanları analiz etmek ve yöntemler arasında bu şekilde ayırt etmek func_get_args kullanabilirsiniz.

Onlar aynı argümanları ele alacak olursak ... o zaman biraz sıkışmış.

Neden sadece iki ayrı Web Hizmetleri kullanamıyorum?