php - 如何创建类的新实例并在WCF中作为参数传递

时间:2011-06-16 15:57:32

标签: php wcf

我是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行中的字符串。

我尝试过不同的方法来尝试实现课程,但没有一种工作。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

你的问题在于这一行:

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

(不是啊,那是第13行,这就是错误所说的那个&lt; - 舌头在脸颊,而不是诅咒)。

好的,有用的评论:

现在,你......嗯,我不知道PHP认为你在做什么,但你不能拥有->new AdminInformation();,除非“new”是一个属性。事件如果AdminInformation不是一个类而只是一个普通函数,那么你需要一个分号。

无论PHP文件中包含include,您都需要requireAdminInformation。如果您没有具有该类定义的文件,那么该服务可以帮助您。

对于从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 */);