php - как создать новый экземпляр класса и передать в качестве параметра в WCF - PullRequest
0 голосов
/ 16 июня 2011

Я новичок в php.У меня есть веб-сервис, который я создал с помощью wpf.

Я пытаюсь использовать следующее

<?php


// Create a new soap client based on the service's metadata (WSDL)
$wsdl = "http://www.xxx.net/PURLServ.svc?wsdl";


try {


$client = new SoapClient($wsdl);

$adminInfo = new $client->AdminInformation();

print 'ok';

// Specify the file to upload
$admininfo->request->authenticationemail = "xx@xx.com"; //required field
$admininfo->request->authenticationpassword = "xxx";            //required field
$admininfo->request->authenticationcustomerid = "12345=";          //required to retrieve customer info.

$wsResult = $webService->GetDataResult;
    print  $wsResult;

// $response = $client->CheckError($adminInfo);
}
catch (Exception $e)
{
print $e->getMessage();
}
    echo $result;
?>

Я получаю следующую ошибку.Неустранимая ошибка: имя класса должно быть допустимым объектом или строкой в ​​строке 13.

Я пробовал разные способы создания экземпляра класса, но ни один не помог.

Спасибо за любую помощь

1 Ответ

0 голосов
/ 16 июня 2011

Ваша проблема с этой строкой:

$adminInfo = $client->new AdminInformation();

(нет, да, это строка 13, вот где говорится об ошибке <- язык в щеке, не смарми). </p>

Хорошо, за полезный комментарий:

Прямо сейчас вы ... ну, я не знаю, что думает PHP, но вы не можете иметь ->new AdminInformation();, если "new" не является свойством. Событие, если AdminInformation - это не класс и не простая функция, вам понадобится точка с запятой.

Вам нужно либо include, либо require независимо от того, в каком файле PHP содержится AdminInformation. Если у вас нет файла с таким определением класса, то ничто не может помочь службе.

Что касается динамической загрузки класса из вызова Soap, не делайте этого. Иметь локальное определение этого класса, а затем сделать так, чтобы вызов Soap возвращал имя класса, или, что еще лучше, иметь некоторую фабрику, способную обработать запрос, чтобы вызов Soap не влиял на ваши локальные структуры классов.

Редактировать


Если вы хотите создать экземпляр класса на основе вызова метода:

 // set $klass to either be a reference to the class or a String of its name.
 // String is generally easier.
 $klass = get_class_name(); // or $client->whateverTheMethodIs();
 if( !class_exists( $klass ) )
 {
      //either import the class or handle the fact that the class isn't there.
 }

 $instance = new $klass(/* constructor arguments here */);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...