Php NuSOAP-函数参数don';不能正确地映射

Php NuSOAP-函数参数don';不能正确地映射,php,soap,parameters,nusoap,Php,Soap,Parameters,Nusoap,我正在用PHP中的NuSOAP编写一个web服务。为了测试它,我编写了一个服务器和一个客户端。在服务器端,我注册函数如下: $server->register( "testFunction", array("param1" => "xsd:string", "param2" => "xsd:string"), array("result" => "xsd:string"), "http://localhost/testApp" ); 在客

我正在用PHP中的NuSOAP编写一个web服务。为了测试它,我编写了一个服务器和一个客户端。在服务器端,我注册函数如下:

$server->register(
    "testFunction",
    array("param1" => "xsd:string", "param2" => "xsd:string"),
    array("result" => "xsd:string"),
    "http://localhost/testApp"
);
在客户端上,如下所示:

require_once("./lib/nusoap.php");

$client = new soapclient("http://localhost/testApp/server.php");
$function = $_GET["function"];
unset($_GET["function"]);
$result = $client->call($function, $_GET);

echo "<pre>". print_r($result, true) ."</pre>";
它工作正常,但如果我切换param1和param2并说

    $default = array(
        'param1' => '',
        'param2' => 'test',
    );
    $params = $defaults;
    foreach ( $_GET as $param_name => $param_value ) {
        if ( isset( $params[ $param_name ] ) ) $params[$param_name] = $param_value;
    }
    $client->call( $function, $params );
然后param1获取值
value2
,param2获取值
value1
。很明显,它只是按照参数的顺序,而不是名称

我想,由于我用特定的参数名注册了函数,然后调用了函数,并指定了这些参数名,因此它们将被相应地分配


我错过什么了吗?如果参数名将被抛出并按您输入的顺序分配,那么指定参数名有什么意义?有没有办法让我可以按任意顺序输入参数并使它们正确映射?

可以在客户端中使用默认映射:

简单的黑客,即使它不能“真正”回答你的问题


需要注意的是,如果您希望客户机了解所进行调用的格式,那么传递给客户机的url必须是SOAP WSDL。是你的吗?(我已经使用nuSoap很久了,但我记得简单地向服务器url添加“.wsdl”参数就足以让服务器用有效的wsdl响应)

这主意不错,但对我来说需要更多。有许多函数可以调用,不同的参数顺序不同,因此我必须执行类似switch语句的操作,并为每个函数设置默认参数。另外,我编写的客户端只是为了我自己的测试。我不会向我们的客户提供任何客户机,因为我认为这在很大程度上违背了使用SOAP的目的。他们需要编写自己的客户机来使用web服务。
http://localhost/testApp/client.php?function=testFunction&param2=value2&param1=value1
    $default = array(
        'param1' => '',
        'param2' => 'test',
    );
    $params = $defaults;
    foreach ( $_GET as $param_name => $param_value ) {
        if ( isset( $params[ $param_name ] ) ) $params[$param_name] = $param_value;
    }
    $client->call( $function, $params );