На nusoap_server класс в invoke_method метод, код не позволяет использовать пространство имен.
function invoke_method() {
// many lines of code...
$class = '';
$method = '';
if (strlen($delim) > 0 && substr_count($this->methodname, $delim) == 1) {
$try_class = substr($this->methodname, 0, strpos($this->methodname, $delim));
if (class_exists($try_class)) {
// get the class and method name
$class = $try_class;
$method = substr($this->methodname, strpos($this->methodname, $delim) + strlen($delim));
$this->debug("in invoke_method, class=$class method=$method delim=$delim");
} else {
$this->debug("in invoke_method, class=$try_class not found");
}
} else {
$try_class = '';
$this->debug("in invoke_method, no class to try");
}
// many lines of code...
}
Но благодарю Бога за открытый исходный код, поэтому давайте модифицируем код!
Это то, что вы могли бы сделать:
function invoke_method() {
// many lines of code...
$class = '';
$method = '';
if (strlen($delim) > 0 && substr_count($this->methodname, $delim) == 1) {
$try_class = substr($this->methodname, 0, strpos($this->methodname, $delim));
if (class_exists($try_class)) {
// get the class and method name
$class = $try_class;
$method = substr($this->methodname, strpos($this->methodname, $delim) + strlen($delim));
$this->debug("in invoke_method, class=$class method=$method delim=$delim");
} else {
$this->debug("in invoke_method, class=$try_class not found");
}
} elseif (strlen($delim) > 0 && substr_count($this->methodname, $delim) > 1) {
$split = explode($delim, $this->methodname);
$method = array_pop($split);
$class = implode('\\', $split);
} else {
$try_class = '';
$this->debug("in invoke_method, no class to try");
}
// many lines of code...
}
Разъяснение:
// Example of namespaced class
// $this->methodname = 'Namespace.Namespace2.Class.MethodName';
// Has delimiter "." or ".." more than one time.
if (strlen($delim) > 0 && substr_count($this->methodname, $delim) > 1) {
// code below
}
// Transform in array
$split = explode($delim, $this->methodname);
// $split = array('Namespace', 'Namespace2', 'Class', 'MethodName')
// Get the last item (method name) and remove from array.
$method = array_pop($split);
// $method = 'MethodName'
// $split = array('Namespace', 'Namespace2', 'Class')
// Transform the class name
$class = implode('\\', $split);
// $class = 'Namespace\Namespace2\Class'
С помощью этой простой модификации вы можете иметь особенность PHP имен работает.
Я знаю, что прошло много времени, но я надеюсь помочь кому-то с этим ответом.
@Alex, я не верю, что это дубликат, поскольку этот вопрос касается пространств имен мыльных/XML-имен, а не пространств имен PHP. – jpheldson
Я также ищу решение по той же проблеме !! черт! когда я получил ур вопрос по поиску Google, я был счастлив и надеялся, что он решит мою: -/ –
@jpheldson Нашел решение? –