Прослушивание вызовов функций PHP для перехвата возвращаемого значения - PullRequest
3 голосов
/ 19 мая 2010

Я работаю над использованием API веб-сервисов, предлагаемых хостами нашей внутренней системы. Я получаю к нему доступ через PHP с помощью встроенного SOAP-предложения.

Сеанс API инициируется удаленным вызовом функции, которая возвращает некоторые токены сеанса; каждый последующий вызов любой функции будет возвращать новый маркер сеанса, который должен сопровождать следующий запрос.

У меня есть клиентский класс API, который выполняет основную часть работы; то, что я хотел бы сделать, - это настроить что-нибудь, с помощью которого любой сделанный вызов SOAP обязательно обновит переменную $ session класса API-клиента новыми деталями сеанса, а затем передаст данные.

Пока единственный способ, которым я могу думать об этом, - это создать новый класс, расширяющий класс SoapClient, с помощью обертки функции __call для выполнения функции, обновления нового токена сеанса и, тем не менее, возврата результатов. Я не уверен, что это будет а) работать б) будет лучшим способом сделать это. Класс-оболочка будет идентичен вызову SOAP и будет возвращать идентичный результат, просто он обновит маркер сеанса, прежде чем вы вернете свой результат.

1 Ответ

2 голосов
/ 19 мая 2010

Звучит правильно, я сделал нечто подобное. Вы, вероятно, захотите что-то вроде:

class YourWrapperClass extends SoapClient
{
  private $session;

  private function mMakeSureSessionIsStarted()
  {
    if(!$this->session)
    {
      // code to start session here...
      $this->session = parent::startSession();
    }
  }

  public function __soapCall($method,array $arguments,array $options,$input_headers=null, array &$output_headers=null)
  {
     $this->mMakeSureSessionIsStarted();
     $arguments['session'] = $this->session;
     return parent::__soapCall($method,$arguments,$options,$input_headers,$output_headers);
  }
}

(Не на 100% положительно, это правильный синтаксис, но я думаю, что это близко ...)

РЕДАКТИРОВАТЬ : пересмотрено на основе ваших комментариев.

...