PHP: уловимая фатальная ошибка: объект класса stdClass не может быть преобразован в строку

Я получаю следующий дамп и ошибку при запуске прикрепленного кода. Что меня смущает, так это то, что $procID возвращается как строка, но как только я пытаюсь передать ее снова, это объект? Как мне заставить его быть/оставаться строкой? Спасибо.

object(stdClass)#2 (1) {
["processId"]=> string(13)
"Genesis114001" }  string(311)
"Genesis114001" string(293) " Genesis
" Catchable fatal error: Object of
class stdClass could not be converted
to string in
C:\wamp\www\SugarCE\testSOAPShawn.php
on line 15
<?php
set_time_limit(0);
require_once('nusoap.php');
require_once('BenefitSOAP.php');  //WSDL to PHP Classes
$client = new SoapClient('C:\wsdl\BenefitDeterminationProcess_BenefitDialogueServiceSOAP.wsdl', array('trace' => 1));
$procID = $client->start(array("prefix"=>"Genesis"));
$respXML = $client->__getLastResponse();
$requXML = $client->__getLastRequest();
echo "<p/>";
var_dump($procID);
//echo "<p/>";
var_dump($respXML);
//echo "<p/>";
var_dump($requXML);
$exchange = $client->exchangeOptions(array("processId"=>$procID)); //LINE 15
$end = $client->stop(array("processId"=>$procID));
?>

person user464180    schedule 17.02.2011    source источник
comment
Вам действительно нужно лучше форматировать свой код, чтобы людям не приходилось так усердно работать, чтобы понять, что он делает.   -  person KOGI    schedule 17.02.2011


Ответы (1)


Что бы ни возвращал метод $client->start(), он типизируется как объект. Вы можете получить доступ к свойствам объекта с помощью оператора ->:

$procID = $client->start(array("prefix"=>"Genesis"));

...

$exchange = $client->exchangeOptions(array("processId"=>$procID->processId));

Вероятно, это был массив, но он вводится в объект. Таким образом, вы получите stdClass.

Другой (и, возможно, лучший) способ сделать это — ввести return. Таким образом, вам не нужно создавать новый массив для последующей передачи в качестве аргумента:

$procID = (array) $client->start(array("prefix"=>"Genesis"));

...

$exchange = $client->exchangeOptions($procID);
$end = $client->stop($procID);
person Chris Baker    schedule 17.02.2011
comment
Спасибо. Это немного сработало, теперь я получаю: Неустранимая ошибка: Исключение Uncaught SoapFault: [HTTP] Ошибка при извлечении заголовков http в C:\wamp\www\SugarCE\testSOAPShawn.php:29 Трассировка стека: #0 [внутренняя функция]: SoapClient-›__doRequest('‹?xml version=...', '10.50.10...', ' ', 1, 0) #1 [внутренняя функция]: SoapClient-›__call('installIdenti...', Array) #2 C:\wamp\www\SugarCE\testSOAPShawn.php(29): SoapClient-›installIdentity( Array) #3 {main} добавлено в C:\wamp\www\SugarCE\testSOAPShawn.php в строке 29 - person user464180; 17.02.2011
comment
Эта ошибка совершенно не связана с этим вопросом. Где-то есть проблема либо в библиотеке, которую вы используете, либо в том, как вы ее используете. Не зная ни одного из этих фактов, я не могу вам ничего посоветовать. Я бы предложил начать новый вопрос по этому поводу, но обязательно примите ответ здесь. - person Chris Baker; 17.02.2011
comment
@Chris Спасибо за это, ваше объяснение имеет смысл, но у меня проблема с вашим решением. Я пробовал оба способа, и я все еще получаю, что stdClass не может быть преобразован в строку. Вот что я получил: $res_array = (array) $php_functions->run_query('SHOW TABLES'); echo implode(',', $res_array); run_query создает массив результатов запроса. - person Travis Heeter; 27.10.2012