Php 将类函数注册为全局函数

Php 将类函数注册为全局函数,php,nusoap,Php,Nusoap,我想在NuSOAP下注册一个类方法,但与其将其注册为其成员,不如将其注册在全局范围内。下面是一些代码来描述我的意思(显然不起作用): 在本例中,我希望将Authenticate称为Authenticate,而不是SOAPInterface.Authenticate。有什么简单的方法吗?我相信您所说的是静态方法。这些都不是全球性的,但可能会达到你的预期。好吧,他们会做到的。关键是要改变它们在WSDL中的作用域(并使其工作)。@datasageglobal正是static类方法。一个人是否应该走这条

我想在NuSOAP下注册一个类方法,但与其将其注册为其成员,不如将其注册在全局范围内。下面是一些代码来描述我的意思(显然不起作用):


在本例中,我希望将
Authenticate
称为
Authenticate
,而不是
SOAPInterface.Authenticate
。有什么简单的方法吗?

我相信您所说的是静态方法。这些都不是全球性的,但可能会达到你的预期。好吧,他们会做到的。关键是要改变它们在WSDL中的作用域(并使其工作)。@datasage
global
正是
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();