Pour développeur confirmé, PHP / C# et overloads ?

Pour développeur confirmé, PHP / C# et overloads ? - PHP - Programmation

Marsh Posté le 09-08-2005 à 12:59:43    

Bonjour,
 
Je développe un web service dont la partie serveur est en PHP, avec le package PEAR::SOAP.
 
Il est fonctionnel et mon problème est plus une question de pratique :
Comment faire, (déjà, est-ce possible ?) pour permettre au développeur de la partie client (disons en C# .NET) de choisir le nombre de paramètres à passer à une méthode du web service ?
 
Exemple :  
 


---serveur.php---
class Serveur
{
   function f1($param1, $param2 = 42)
   {
      // param1 est requis et param2 est optionnel et prend  
      // une valeur par défaut s'il n'est pas renseigné
   }
}


 
A partir de là, quand on utilise le web service sous Visual Studio, on a acces a la méthode mais tous les paramètres sont obligatoires. Je voudrais avoir des overloads pour pouvoir choisir quels params passer à la méthode distante...
 
De même, sur un client en PHP, si je ne passe volontairement pas tous les paramètres que je voudrais optionnels, le serveur renvoie une exception SOAP.
 
Please help !
 

Reply

Marsh Posté le 09-08-2005 à 12:59:43   

Reply

Marsh Posté le 09-08-2005 à 13:44:29    

Si j'ai bien compris ton probleme, tu viens de te heurter a un gros probleme de PHP : Il connait pas la surcharge des metodes/constructeurs :D ... Donc soit tu re-ecris toi meme toutes les parties touchées en utilisant les manieres de feitner la surcharge (c'est expliqué sur php.net) soit tu peux pas :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 09-08-2005 à 14:38:51    

Effectivement c'est le problème que PHP ne gère pas la surcharge, mais je me disais que peut être le package SOAP de PEAR prévoyait un système pour ce genre d'utilisation... Mais comme la doc de cette lib est quasi-inexistante, ça aide pas...
 
En ce qui concerne les moyens de feinter la surcharge, je pense que tu fais allusion à func_num_args() et func_get_args(), mais c'est valable pour des fonctions/methodes appellées localement, mais pas pour des RPC sur un shéma client/serveur... En tout cas d'apres mes tests ça mène à rien.
 
Si quelqu'un pouvait me démontrer le contraire ça serait bien :)


Message édité par outdial le 09-08-2005 à 14:43:15
Reply

Marsh Posté le 09-08-2005 à 17:11:07    

une seul solution... passer un unique tableau en parametre, qui contient lui un nombre variable de données
 
sinon je crois qu'il y a un moyen de déclarer une fonction avec un nombre variable de paramètres, mais peut etre est ce au niveau de la création de modules php

Reply

Marsh Posté le 10-08-2005 à 14:20:20    

Effectivement, j'ai pensé à cette solution mais elle ne m'arrange pas du tout, à la limite tant pis si je trouve pas mieux je laisserais tous les params en obligatoires, c'est bête car ça force le développeur de la partie cliente à passer des valeurs "par défaut" que le serveur pourrait très bien attribuer par lui même.
 
Merci quand même ;)

Reply

Marsh Posté le 10-08-2005 à 14:27:10    

En fait, pour mieux vous expliquer, le truc c'est que la lib SOAP de PEAR a un systeme pour générer le fichier WSDL. Je pense que s'il existe une solution à mon problème, c'est au niveau de la syntaxe du WSDL. Dans mon code serveur, j'ai des choses du genre :
 

Code :
  1. $this->__dispatch_map['maFonctionServ'] = Array(
  2.   'in' => Array('param1' => 'string',
  3.   'param2' => 'int',
  4.   'param3' => 'bool'),
  5.   'out' => Array('return' => 'int')
  6.  );


 
C'est un exemple simpliste mais globalement c'est comme ça que la lib génère le WSDL, en ayant les entrées et les sortie pour chaque fonction du webservice, avec leurs types. Cela permet l'interopérabilité entre tous les languages de programmation (enfin, ceux qui ont une lib adaptée... ;))
 
Bref, passons. En fait, je m'adresse un peu aux connaisseurs de PEAR::SOAP (et dans ce cas, ce que je viens d'expliquer ne leur sert surement à rien); donc s'il y en a il pourront surement me dire si un systeme d'overload de fonctions est possible avec ça et comment l'écrire.
 
Docs introuvables sur le net... :'(

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed