У меня есть простое взаимодействие SOAP сервера / клиента с классом Shop (shop.php), прокомментированным следующим образом:
<?php
/**
* Class Shop
* Objective: Handling my shop
*
* @author Me
*/
require_once('config.php');
include("product.php");
include("fruit.php");
class Shop{
/**
* Returns a string with family's products concatenated
*
* @param string $familyId
* @return string
*
*/
public static function getFamilyProducts($familyId){
Теперь я размещаю свой WSDLDocument.php рядом с моим классом (все файлы находятся в одной папке) и пишу свой WSDLgenerator.php:
<?php
require_once('shop.php');
require_once('WSDLDocument.php');
$url = "http://localhost/Shop/server.php";
$uri = "http://localhost/Shop";
$wsdl = new WSDLDocument( "Shop", $url, $uri );
echo $wsdl->saveXml();
?>
Мой сервер безупречно обслуживает моего клиента, но вот он, если вы хотите проверить:
<?php
require_once('shop.php');
$uri = 'http://localhost/Shop';
$server = new SoapServer(null, array('uri' => $uri));
$server -> setClass('Shop');
$server -> handle();
?>
Когда я обращаюсь к WSDLGenerator.php, он печатает «Цель магазина классов: работа с моим магазином», но не более того. Инспектор браузера получает имя класса и строки:
<wsdl:service name = "Shop">
<wsdl:documentation>Class Shop Objective: Handling my shop
</wsdl:documentation>
...
Есть несколько вызовов Shop ("ShopPortType", "ShopBinding", "ShopPort"), но нет сигнала о моих функциях и их параметрах ...






Я НАШЕЛ ПРОБЛЕМУ! Если функция является общедоступной статический, XML просто не будет отображаться (не знаю почему, но это все). Просто измените их на публичные.