Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Class SoapClient в PHP5
 
 автор: Loki   (16.01.2008 в 13:53)   письмо автору
 
 

Есть сабжевый класс в пятой версии. За отправку запроса серверу отвечает метод __soapCall, который в качестве параметров получает название soap-метода и массив параметров:
<?
    $params
=array(
        
'var1'            =>    'data',
        
'var2'            =>    'data',
        
'var3'        =>    'data');
    
$data=$client->__soapCall('select'$params);


что меня смущает: несмотря на то, что массив ассоциированный, метод его рассматривает как обычный. То есть берет элементы массива друг за другом и подставляет в запрос. Что из этого получается? Что если у меня два десятка параметров, а мне надо передать только последний параметр, то придется перед ним 19 раз поставить null. Более того, если на сервере в новой версии поменяется количество параметров или порядок их следования, то придется проверять все скрипты. Звучит как бред. Меня не оставляет ощущение, что где-то я разработчиков не очень понял. Тем более что тот же NuSOAP, насколько мне известно, адекватно воспринимает названия параметров.
В общем, вопрос такой: как правильно передавать в метод __soapCall параметры, чтобы потом не кусать локти?

   
 
 автор: Unkind   (16.01.2008 в 14:16)   письмо автору
 
   для: Loki   (16.01.2008 в 13:53)
 

Не имел дело с данным классом, но в мануале же написано "mixed __soapCall ( string $function_name , array $arguments [, array $options [, mixed $input_headers [, array &$output_headers ]]] )" - второй агрумент это массив агрументов для какой-то функции function_name.
Ведь если у функции будет сменем список аргументов - то да, придется бегать и все исправлять. Это уже на бред, по-моему, не похоже. Хотя сам факт смены аргументов и их положения будет, конечно, ненормальным.

   
 
 автор: Loki   (16.01.2008 в 14:34)   письмо автору
 
   для: Unkind   (16.01.2008 в 14:16)
 

Это не функция, это запрос. Большинство из его параметров (как правило все) имеют значения по умолчанию. Более того, классу известен из WSDL файла и список параметров, и значения по умолчанию. Поэтому мне тем более непонятно почему разработчик должен выделывать подобные пируэты. А изменение списка параметров - ситуация нормальная. Все сервисы развиваются и изменяются.
В общем еще раз повторю вопрос: можно ли передавать параметры запроса выборочно? NuSOAP, который, по сравнению с этим классом является как бы устаревшим, это умеет.

Кстати, видел среди примеров такой синтаксис:
<?
$params
->var1=data;
$params->var2=data;
$client->select($params);

Но такой синтаксис не работает. Точнее, использование SOAP метода вместо название метода класса работает нормально, а вот объект (и даже массив) вместо строки принимать не хочет.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования