(PHP 5, PHP 7, PHP 8)

SoapServer::addFunctionДобавляет одну или несколько функций для обработки запросов SOAP


public SoapServer::addFunction(array|string|int $functions): void

Экспортирует одну или несколько функций удалённому клиенту

Список параметров


Для экспорта одной функции, передайте в этот параметр её имя в виде строки.

Для экспорта нескольких функций, передайте в этот параметр массив с именами функций.

Для экспорта всех функций, задайте параметр константой SOAP_FUNCTIONS_ALL.


Параметр functions должен принимать все входящие аргументы в том же порядке, как они определены в файле WSDL (они не должны принимать никаких возвращаемых параметров в качестве аргументов) и должны возвращать одно или больше значений. Для возврата нескольких значений, они должны возвращать массив с именованными возвращаемыми параметрами.

Возвращаемые значения

Функция не возвращает значения после выполнения.


Пример #1 Пример использования SoapServer::addFunction()


function echoString($inputString)


echoTwoStrings($inputString1, $inputString2)
return array(
"outputString1" => $inputString1,
"outputString2" => $inputString2);
$server->addFunction(array("echoString", "echoTwoStrings"));



Смотрите также

add a note

User Contributed Notes 3 notes

dotpointer at gmail dot com
15 years ago
Be careful with SOAP_FUNCTIONS_ALL, as it adds ALL availiable PHP functions to your server.

This can be a potential security threat, imagine clients doing this:

echo $client->file_get_contents("c:\\my files\\my_passwords.doc");

And voila, they have the contents of your file my_passwords.doc.
Evan Borgstrom
16 years ago
In response to comment by Nathan O'Sullivan about returning (or passing) a complex type, you can also use the stdClass() object.

Assume you define a complex type like so:

<xsd:complexType name="TestType">
                <xsd:element name="A" type="xsd:string" />
                <xsd:element name="B" type="xsd:int" />
                <xsd:element name="C" type="xsd:boolean" />

To use an object in place of an array you can do:

$test = new stdClass();
$test->A = "test string";
$test->B = 45;
$test->C = false;

$result = $client->Test($test);
Nathan O'Sullivan
17 years ago
You may be left wondering, as I was, how to return a complex type - consider the following WSDL snippets, for a method called Login:

<xs:element name="Login">
            <xs:element minOccurs="0" maxOccurs="1" name="username" type="xs:string" />
            <xs:element minOccurs="0" maxOccurs="1" name="password" type="xs:string" />

   <xs:complexType name="UserInfo">
          <xs:element minOccurs="0" maxOccurs="1" name="Id" type="xs:string" />
          <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
          <xs:element minOccurs="0" maxOccurs="1" name="Nickname" type="xs:string" />
          <xs:element minOccurs="0" maxOccurs="1" name="Email" type="xs:string" />

   <xs:element name="LoginResponse">
            <xs:element minOccurs="0" maxOccurs="1" name="LoginResult" type="s0:UserInfo" />

Here's a working Login function  that I've added with add SoapServer::addFunction

function Login($username, $password)
  return array("LoginResult", array("Id"=>1, "Name"=>"Nathan", "Nickname"=>"Nathan", "Email"=>"email address") );

The UserInfo complextype is represented by the inner array.  The outer array has just one element, "LoginResult".  The LogineResponse element  seems to be treated as a one-member array by PHP.
To Top