Files
php-doc-ru/reference/soap/soapclient/construct.xml
2023-09-09 13:20:26 +03:00

777 lines
36 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 497c40ac164d5873fd87f622dfdeb5206392b446 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="soapclient.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>SoapClient::__construct</refname>
<refpurpose>Конструктор класса SoapClient</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<constructorsynopsis role="SoapClient">
<modifier>public</modifier> <methodname>SoapClient::__construct</methodname>
<methodparam><type class="union"><type>string</type><type>null</type></type><parameter>wsdl</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>options</parameter><initializer>[]</initializer></methodparam>
</constructorsynopsis>
<para>
Создаёт объект <classname>SoapClient</classname> для подключения к службе SOAP.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>wsdl</parameter></term>
<listitem>
<para>
URI WSDL-файла, описывающего сервис, который используется для автоматической настройки клиента.
Если он не указан, клиент будет работать в режиме без WSDL.
mode.
</para>
<note>
<para>
По умолчанию WSDL-файл будет кешироваться для повышения производительности.
Чтобы отключить или настроить кеширование, смотрите раздел
<link linkend="soap.configuration.list">&ConfigureOptions; SOAP</link>
и <link linkend="soapclient.construct.options.cache-wsdl">параметр <literal>cache_wsdl</literal></link>.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>options</parameter></term>
<listitem>
<para>
Ассоциативный массив, определяющий дополнительные параметры для клиента SOAP.
Если указан параметр <parameter>wsdl</parameter>, это необязательно, в противном случае,
по крайней мере параметры <literal>location</literal> и <literal>url</literal> должны быть указаны.
<variablelist>
<varlistentry xml:id="soapclient.construct.options.location">
<term>
<parameter>location</parameter>
<type>string</type>
</term>
<listitem>
<para>
URL-адрес сервера SOAP для отправки запроса.
</para>
<para>
Обязателен, если параметр <parameter>wsdl</parameter> не указан.
Если предоставлены и параметр <parameter>wsdl</parameter> и
<literal>location</literal>, параметр <literal>location</literal>
будет приоритетнее расположения, указанного в WSDL-файле.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.uri">
<term>
<parameter>uri</parameter>
<type>string</type>
</term>
<listitem>
<para>
Целевое пространство имён службы SOAP.
</para>
<para>
Обязателен, если параметр <parameter>wsdl</parameter> не указан;
в противном случае игнорируется.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.style">
<term>
<parameter>style</parameter>
<type>int</type>
</term>
<listitem>
<para>
Определяет стиль связывания, который будет использоваться клиентом, используя константы
<constant>SOAP_RPC</constant> и <constant>SOAP_DOCUMENT</constant>.
Константа <constant>SOAP_RPC</constant> указывает на привязку в стиле RPC, где
тело запроса SOAP содержит стандартное кодирование вызова функции.
Константа <constant>SOAP_DOCUMENT</constant> указывает на привязку в стиле документа,
где тело запроса SOAP содержит XML-документ с определённым службой значением.
</para>
<para>
Если указан параметр <parameter>wsdl</parameter>,
то этот параметр игнорируется, а стиль считывается из WSDL-файла.
</para>
<para>
Если ни этот параметр, ни параметр <parameter>wsdl</parameter>
не указан, используется RPC-стиль.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.use">
<term>
<parameter>use</parameter>
<type>int</type>
</term>
<listitem>
<para>
Определяет стиль кодировки, который будет использоваться клиентом, используя константы
<constant>SOAP_ENCODED</constant> или <constant>SOAP_LITERAL</constant>.
Константа <constant>SOAP_ENCODED</constant> указывает на кодирование с использованием типов
определённых в спецификации SOAP.
Константа <constant>SOAP_LITERAL</constant> указывает на кодирование с использованием схемы
определённой службой.
</para>
<para>
Если указан параметр <parameter>wsdl</parameter>, этот
параметр игнорируется, а кодировка считывается из файла WSDL.
</para>
<para>
Если ни этот параметр, ни параметр <parameter>wsdl</parameter>
не указаны, используется стиль "encoded".
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.soap-version">
<term>
<parameter>soap_version</parameter>
<type>int</type>
</term>
<listitem>
<para>
Определяет версию протокола SOAP:
Константа <constant>SOAP_1_1</constant> для SOAP 1.1,
или <constant>SOAP_1_2</constant> для SOAP 1.2.
</para>
<para>
Если опущено, используется SOAP 1.1.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.authentication">
<term>
<parameter>authentication</parameter>
<type>int</type>
</term>
<listitem>
<para>
Указывает метод аутентификации при использовании HTTP-аутентификации
в запросах. Значение может быть либо <constant>SOAP_AUTHENTICATION_BASIC</constant>,
либо <constant>SOAP_AUTHENTICATION_DIGEST</constant>.
</para>
<para>
Если параметр не указан, но указан параметр <literal>login</literal>,
используется Basic Authentication.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.login">
<term>
<parameter>login</parameter>
<type>string</type>
</term>
<listitem>
<para>
Имя пользователя для использования при аутентификации HTTP Basic или Digest.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.password">
<term>
<parameter>password</parameter>
<type>string</type>
</term>
<listitem>
<para>
Пароль для использования при аутентификации HTTP Basic или Digest.
</para>
<para>
Не следует путать с параметром <literal>passphrase</literal>,
который используется при аутентификации сертификата клиента HTTPS.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.local-cert">
<term>
<parameter>local_cert</parameter>
<type>string</type>
</term>
<listitem>
<para>
Путь к клиентскому сертификату для использования с аутентификацией HTTPS.
Должен быть файл в кодировке <acronym>PEM</acronym>, содержащий сертификат и закрытый ключ.
</para>
<para>
Файл также может включать цепочку эмитентов, которая должна идти
после сертификата клиента.
</para>
<para>
Также может быть задан с помощью параметра
<link linkend="soapclient.construct.options.stream-context"><parameter>stream_context</parameter></link>,
который также поддерживает указание отдельного файла закрытого ключа.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.passphrase">
<term>
<parameter>passphrase</parameter>
<type>string</type>
</term>
<listitem>
<para>
Ключевая фраза для клиентского сертификата, указанного в параметре
<literal>local_cert</literal>.
</para>
<para>
Не следует путать с параметром <literal>password</literal>,
который используется для аутентификации Basic или Digest.
</para>
<para>
Можно также установить с помощью параметра
<link linkend="soapclient.construct.options.stream-context"><parameter>stream_context</parameter></link>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.proxy-host">
<term>
<parameter>proxy_host</parameter>
<type>string</type>
</term>
<listitem>
<para>
Имя хоста для использования в качестве прокси-сервера для HTTP-запросов.
</para>
<para>
Также должен быть указан параметр <literal>proxy_port</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.proxy-port">
<term>
<parameter>proxy_port</parameter>
<type>int</type>
</term>
<listitem>
<para>
TCP-порт для использования при подключении к прокси-серверу,
указанному в параметре <literal>proxy_host</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.proxy-login">
<term>
<parameter>proxy_login</parameter>
<type>string</type>
</term>
<listitem>
<para>
Необязательное имя пользователя для аутентификации на прокси-сервере,
указанном в параметре <literal>proxy_host</literal>, используя HTTP
Basic Authentication.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.proxy-password">
<term>
<parameter>proxy_password</parameter>
<type>string</type>
</term>
<listitem>
<para>
Необязательный пароль для аутентификации на прокси-сервере,
указанном в параметре <literal>proxy_host</literal>, используя HTTP
Basic Authentication.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.compression">
<term>
<parameter>compression</parameter>
<type>int</type>
</term>
<listitem>
<para>
Включает сжатие HTTP SOAP запросов и ответов.
</para>
<para>
Значение должно быть побитовым ИЛИ из трёх частей:
необязательная <constant>SOAP_COMPRESSION_ACCEPT</constant>,
для отправки заголовка "Accept-Encoding";
либо константа <constant>SOAP_COMPRESSION_GZIP</constant>
или <constant>SOAP_COMPRESSION_DEFLATE</constant> для указания
используемого алгоритма сжатия;
число от 1 до 9, чтобы указать уровень сжатия, который будет использоваться в запросе.
Например, чтобы включить двустороннее сжатие gzip с максимальным
уровнем сжатия, используйте
<literal>SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.encoding">
<term>
<parameter>encoding</parameter>
<type>string</type>
</term>
<listitem>
<para>
Определяет внутреннюю кодировку символов. Запросы всегда отправляются
в UTF-8 и преобразуются в эту кодировку и обратно.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.trace">
<term>
<parameter>trace</parameter>
<type>bool</type>
</term>
<listitem>
<para>
Захватывает информацию о запросе и ответе, которая затем может быть доступна с помощью методов:
<methodname>SoapClient::__getLastRequest</methodname>,
<methodname>SoapClient::__getLastRequestHeaders</methodname>,
<methodname>SoapClient::__getLastResponse</methodname>
и <methodname>SoapClient::__getLastResponseHeaders</methodname>.
</para>
<para>
Если опущено, по умолчанию используется значение &false;.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.classmap">
<term>
<parameter>classmap</parameter>
<type>array</type>
</term>
<listitem>
<para>
Используется для сопоставления типов, определённых в WSDL с классами PHP.
Должен быть указан ассоциативный массив (<type>array</type>) с
именами типов из WSDL в качестве ключей и именами классов PHP в качестве значений.
Обратите внимание, что имя типа элемента не обязательно совпадает с именем элемента (тега).
</para>
<para>
Предоставляемые имена классов всегда должны быть полностью определены с помощью любых
<link linkend="language.namespaces">пространств имён</link> и никогда не должны
начинаться с ведущего слеша (<literal>\</literal>).
Правильная форма может быть указана с помощью
<link linkend="language.oop5.basic.class.class">::class</link>.
</para>
<para>
Обратите внимание, что при создании класса конструктор вызываться не будет,
но магические методы <link linkend="object.set">__set()</link> и
<link linkend="object.get">__get()</link> будут вызываться
для отдельных свойств.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.typemap">
<term>
<parameter>typemap</parameter>
<type>array</type>
</term>
<listitem>
<para>
Используется для определения сопоставлений типов с помощью определяемых
пользователем callback-функций.
Каждое сопоставление типов должно представлять собой массив с ключами
<literal>type_name</literal> (строка (<type>string</type>), определяющая тип элемента XML);
<literal>type_ns</literal> (строка (<type>string</type>), содержащая пространство имён URI);
<literal>from_xml</literal> (<type>callable</type>, принимающий один строковый параметр и возвращающий объект) и
<literal>to_xml</literal> (<type>callable</type>, принимающий один объектный параметр и возвращающий строку).
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.exceptions">
<term>
<parameter>exceptions</parameter>
<type>bool</type>
</term>
<listitem>
<para>
Определяет, будут ли ошибки выбрасывать исключение типа
<classname>SoapFault</classname>.
</para>
<para>
По умолчанию значение &true;
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.connection-timeout">
<term>
<parameter>connection_timeout</parameter>
<type>int</type>
</term>
<listitem>
<para>
Определяет время ожидания в секундах для соединения с сервисом SOAP.
Параметр не определяет время ожидания служб с медленными ответами.
Чтобы ограничить время ожидания завершения вызовов, можно использовать параметр
конфигурации <link linkend="ini.default-socket-timeout">default_socket_timeout</link>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.cache-wsdl">
<term>
<parameter>cache_wsdl</parameter>
<type>int</type>
</term>
<listitem>
<para>
Если указан параметр <parameter>wsdl</parameter>, а также параметр
<link linkend="ini.soap.wsdl-cache-enabled">soap.wsdl_cache_enabled</link>
включён, этот параметр определяет тип кеширования.
Одно из значений: <constant>WSDL_CACHE_NONE</constant>,
<constant>WSDL_CACHE_DISK</constant>,
<constant>WSDL_CACHE_MEMORY</constant> или
<constant>WSDL_CACHE_BOTH</constant>.
</para>
<para>
Доступны два типа кеша: кеширование в памяти, которое кеширует WSDL в памяти текущего процесса
и дисковое кеширование, которое кеширует WSDL в файле на диске, разделяемом между всеми процессами.
Каталог, который будет использоваться для дискового кеша, определяется параметром
<link linkend="ini.soap.wsdl-cache-dir">soap.wsdl_cache_dir</link>.
Оба кеша используют одинаковое время жизни, определяемое параметром
<link linkend="ini.soap.wsdl-cache-ttl">soap.wsdl_cache_ttl</link>.
У кеша в памяти также есть максимальное количество записей, определяемое параметром
<link linkend="ini.soap.wsdl-cache-limit">soap.wsdl_cache_limit</link>.
</para>
<para>
Если не указано, будет использоваться параметр конфигурации
<link linkend="ini.soap.wsdl-cache">soap.wsdl_cache</link>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.user-agent">
<term>
<parameter>user_agent</parameter>
<type>string</type>
</term>
<listitem>
<para>
Значение для использования в HTTP-заголовке <literal>User-Agent</literal>
при выполнении запросов.
</para>
<para>
Можно также установить с помощью параметра
<link linkend="soapclient.construct.options.stream-context"><parameter>stream_context</parameter></link>.
</para>
<para>
Если не указано, User-Agent будет <literal>"PHP-SOAP/"</literal>
за которым следует значение <constant>PHP_VERSION</constant>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.stream-context">
<term>
<parameter>stream_context</parameter>
<type>resource</type>
</term>
<listitem>
<para>
Контекст <link linkend="context">stream context</link>, созданный с помощью
функции <function>stream_context_create</function>, которая позволяет установить дополнительные
параметры.
</para>
<para>
Контекст может включать <link linkend="context.socket">параметры контекста сокета</link>,
<link linkend="context.ssl">параметры контекста SSL</link>,
а также выбранные <link linkend="context.http">опции контекста HTTP</link>:
<literal>content_type</literal>, <literal>header</literal>,
<literal>max_redirects</literal>, <literal>protocol_version</literal>,
и <literal>user_agent</literal>.
</para>
<para>
Обратите внимание, что следующие HTTP-заголовки генерируются автоматически или на основе других
параметров и будут игнорироваться, если указаны в параметре контекста <literal>'header'</literal>:
<literal>host</literal>, <literal>connection</literal>,
<literal>user-agent</literal>, <literal>content-length</literal>,
<literal>content-type</literal>, <literal>cookie</literal>,
<literal>authorization</literal> и <literal>proxy-authorization</literal>
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.features">
<term>
<parameter>features</parameter>
<type>int</type>
</term>
<listitem>
<para>
Битовая маска для включения одной или нескольких следующих функций:
<variablelist>
<varlistentry>
<term>
<constant>SOAP_SINGLE_ELEMENT_ARRAYS</constant>
</term>
<listitem>
<para>
При декодировании ответа в массив по умолчанию определяется,
появляется ли имя элемента один или несколько раз в определённом родительском элементе.
Для элементов, которые появляются только один раз,
свойство объекта позволяет получить прямой доступ к содержимому;
для элементов, которые появляются более одного раза,
свойство содержит массив с содержимым каждого соответствующего элемента.
</para>
<para>
Если включена функция <constant>SOAP_SINGLE_ELEMENT_ARRAYS</constant>,
элементы, которые появляются только один раз, помещаются в одноэлементный массив,
чтобы доступ был последовательным для всех элементов.
Это будет работать только при использовании WSDL, содержащего схему для ответа.
Для демонстрации смотрите раздел с примерами.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<constant>SOAP_USE_XSI_ARRAY_TYPE</constant>
</term>
<listitem>
<para>
Если <link linkend="soapclient.construct.options.use">параметру <literal>use</literal></link> или свойству WSDL
передано значение <literal>encoded</literal>, массивы принудительно используют тип
<literal>SOAP-ENC:Array</literal>, а не специфический для схемы.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<constant>SOAP_WAIT_ONE_WAY_CALLS</constant>
</term>
<listitem>
<para>
Ожидание ответа, даже если WSDL указывает на односторонний запрос.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.keep-alive">
<term>
<parameter>keep_alive</parameter>
<type>bool</type>
</term>
<listitem>
<para>
Логическое значение, определяющее, следует ли
отправлять заголовок <literal>Connection: Keep-Alive</literal> или
<literal>Connection: close</literal>.
</para>
<para>
По умолчанию &true;
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="soapclient.construct.options.ssl-method">
<term>
<parameter>ssl_method</parameter>
<type>string</type>
</term>
<listitem>
<para>
Определяет версию протокола SSL или TLS для использования в защищённых
HTTP-соединениях вместо согласования по умолчанию.
Указание <constant>SOAP_SSL_METHOD_SSLv2</constant> или <constant>SOAP_SSL_METHOD_SSLv3</constant>
заставит использовать SSL 2 или SSL 3, соответственно.
Указание константы <constant>SOAP_SSL_METHOD_SSLv23</constant> не имеет никакого смысла;
константа существует только для обратной совместимости.
Начиная с PHP 7.2, указание константы <constant>SOAP_SSL_METHOD_TLS</constant>
также не имеет никакого смысла; в более ранних версиях константа
определяла принудительное использование TLS 1.0.
</para>
<para>
Обратите внимание, что SSL версий 2 и 3 считаются небезопасными и могут не
поддерживаться установленной библиотекой OpenSSL.
</para>
<para>
Параметр объявлен <emphasis>УСТАРЕВШИМ</emphasis>, начиная с PHP 8.1.0.
Более гибкой альтернативой, позволяющей указывать
отдельные версии TLS, можно использовать параметр
<link linkend="soapclient.construct.options.stream-context"><parameter>stream_context</parameter></link>
с параметром контекста 'crypto_method'.
<example>
<title>Указание использования только TLS 1.3</title>
<programlisting role="php">
<![CDATA[
<?php
$context = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT
]
]);
$client = new SoapClient("some.wsdl", ['context' => $context]);
]]>
</programlisting>
</example>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Метод <methodname>SoapClient::__construct</methodname> выводит ошибку уровня
<constant>E_ERROR</constant>, если параметры <literal>location</literal> и
<literal>uri</literal> не указаны в режиме не-WSDL.
</para>
<para>
Выбрасывается исключение <classname>SoapFault</classname>, если
параметр <parameter>wsdl</parameter> URI не может быть загружен.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <methodname>SoapClient::__construct</methodname></title>
<programlisting role="php">
<![CDATA[
<?php
$client = new SoapClient("some.wsdl");
$client = new SoapClient("some.wsdl", array('soap_version' => SOAP_1_2));
$client = new SoapClient("some.wsdl", array('login' => "some_name",
'password' => "some_password"));
$client = new SoapClient("some.wsdl", array('proxy_host' => "localhost",
'proxy_port' => 8080));
$client = new SoapClient("some.wsdl", array('proxy_host' => "localhost",
'proxy_port' => 8080,
'proxy_login' => "some_name",
'proxy_password' => "some_password"));
$client = new SoapClient("some.wsdl", array('local_cert' => "cert_key.pem"));
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/",
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL));
$client = new SoapClient("some.wsdl",
array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9));
$client = new SoapClient("some.wsdl", array('encoding'=>'ISO-8859-1'));
class MyBook {
public $title;
public $author;
}
$client = new SoapClient("books.wsdl", array('classmap' => array('book' => "MyBook")));
$typemap = array(
array("type_ns" => "http://schemas.example.com",
"type_name" => "book",
"from_xml" => "unserialize_book",
"to_xml" => "serialize_book")
);
$client = new SoapClient("books.wsdl", array('typemap' => $typemap));
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Пример использования <constant>SOAP_SINGLE_ELEMENT_ARRAYS</constant></title>
<programlisting role="php">
<![CDATA[
/* Предполагая, что ответ, подобный этому, и соответствующий WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:example">
<SOAP-ENV:Body>
<response>
<collection>
<item>Single</item>
</collection>
<collection>
<item>First</item>
<item>Second</item>
</collection>
</response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*/
echo "По умолчанию:\n";
$client = new TestSoapClient(__DIR__ . '/temp.wsdl');
$response = $client->exampleRequest();
var_dump( $response->collection[0]->item );
var_dump( $response->collection[1]->item );
echo "\nС помощью SOAP_SINGLE_ELEMENT_ARRAYS:\n";
$client = new TestSoapClient(__DIR__ . '/temp.wsdl', ['features' => SOAP_SINGLE_ELEMENT_ARRAYS]);
$response = $client->exampleRequest();
var_dump( $response->collection[0]->item );
var_dump( $response->collection[1]->item );
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
По умолчанию:
string(6) "Single"
array(2) {
[0] =>
string(5) "First"
[1] =>
string(6) "Second"
}
С помощью SOAP_SINGLE_ELEMENT_ARRAYS:
array(1) {
[0] =>
string(6) "Single"
}
array(2) {
[0] =>
string(5) "First"
[1] =>
string(6) "Second"
}
]]>
</screen>
</example>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->