Php 将类函数注册为全局函数
我想在NuSOAP下注册一个类方法,但与其将其注册为其成员,不如将其注册在全局范围内。下面是一些代码来描述我的意思(显然不起作用):Php 将类函数注册为全局函数,php,nusoap,Php,Nusoap,我想在NuSOAP下注册一个类方法,但与其将其注册为其成员,不如将其注册在全局范围内。下面是一些代码来描述我的意思(显然不起作用): 在本例中,我希望将Authenticate称为Authenticate,而不是SOAPInterface.Authenticate。有什么简单的方法吗?我相信您所说的是静态方法。这些都不是全球性的,但可能会达到你的预期。好吧,他们会做到的。关键是要改变它们在WSDL中的作用域(并使其工作)。@datasageglobal正是static类方法。一个人是否应该走这条
在本例中,我希望将
Authenticate
称为Authenticate
,而不是SOAPInterface.Authenticate
。有什么简单的方法吗?我相信您所说的是静态方法。这些都不是全球性的,但可能会达到你的预期。好吧,他们会做到的。关键是要改变它们在WSDL中的作用域(并使其工作)。@datasageglobal
正是static
类方法。一个人是否应该走这条路取决于个人。但是,它充斥着与global
相关的所有陷阱和问题,所以要小心……我不认为SOAP方法可以是静态的,因为它总是与特定对象相关,但即使可以,静态方法也被Classname::methodname()
引用,因此,您仍然必须指定全名。无论如何,globals通常被认为是糟糕的编码风格的标志:如果global似乎是答案,那么几乎总是有更好的方法来实现它。我需要使用公共上下文中给定的名称实现一个接口。问题是methodname()
能否自动转换为NuSOAP端的Classname::methodname()
。
class SOAPInterface
{
public function Authenticate($walkid,$asdf)
{
return 7;
}
}
$namespace = '';
$server = new soap_server();
$server->debug_flag = false;
$server->configureWSDL("WackyWsdl", $namespace,"my_wsdl_url");
$server->wsdl->schemaTargetNamespace = $namespace;
$server->register('SOAPInterface.Authenticate', // method name
array('ContractorId' => 'xsd:int', 'Password'=>'xsd:string'), // input parameters
array('return' => 'xsd:int'), // output parameters
$namespace, // namespace
$namespace . '#Authenticate', // soapaction
'rpc', // style
'encoded', // use
'Some doc' // documentation
);
$HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA'])
? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
$server->service($HTTP_RAW_POST_DATA);
$this->autoRender = false;
exit();