我是php的新手。我有一个用wpf创建的Web服务。
我正在尝试使用以下
<?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行中的字符串。
我尝试过不同的方法来尝试实现课程,但没有一种工作。
感谢您的帮助
答案 0 :(得分:0)
你的问题在于这一行:
$adminInfo = $client->new AdminInformation();
(不是啊,那是第13行,这就是错误所说的那个&lt; - 舌头在脸颊,而不是诅咒)。
好的,有用的评论:
现在,你......嗯,我不知道PHP认为你在做什么,但你不能拥有->new AdminInformation();
,除非“new”是一个属性。事件如果AdminInformation不是一个类而只是一个普通函数,那么你需要一个分号。
无论PHP文件中包含include
,您都需要require
或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 */);