POO en PHP5

Résolu/Fermé
Nadia - 20 févr. 2008 à 20:11
 farzit - 1 juil. 2008 à 13:49
Bonjour,
Je dois mettre en place un service web catalogue que voici:

import java.util.Hashtable;
/**
* Simple classe java qui fera office de service web ...
*/
public class ServiceCatalogue{

private Hashtable catalogue;

public ServiceCatalogue(){
catalogue = new Hashtable();
catalogue.put("java", "Sun Microsystem");
catalogue.put("eclipse", "Open Source");
catalogue.put("dotnet", "Microsoft");
catalogue.put("websphere", "IBM");
catalogue.put("WebLogic", "BEA");
catalogue.put("Langage C", "Borland");
}

public void supprimerLivre(String titre){
if (titre == null){
throw new IllegalArgumentException("Le titre doit etre renseigne.");
}
catalogue.remove(titre);
}

public void ajouterLivre(String titre, String auteur){
if ((titre == null) || (auteur == null)){
throw new IllegalArgumentException("Le titre et le nom de l'auteur doivent être renseignes.");
}
catalogue.put(titre,auteur);
}

public String trouverAuteur(String titre){
if (titre == null){
throw new IllegalArgumentException("Le titre doit etre renseigne.");
}
// Retourne l'auteur correspondant à la clé titre
return (String)catalogue.get(titre);
}

public Hashtable lister(){
return catalogue;
}
}

ce que j'ai fait en utilisant axis.
Et je dois ensuite mettre en place un service client sous nuSOAP. Pour cela, j'ai créé deux fichiers php:
ClientCatalogue.php
<?php

include('C:\Program Files\EasyPHP1-8\www\Client NuSOAP\nusoap-0.7.3\lib\nusoap.php');
//$client = new soapclient('http://localhost:8080/axis/ServiceCatalogue.jws');

class catalogue{
function lister(){
$client = new soapclient('http://localhost:8080/axis/ServiceCatalogue.jws');
$resultat = $client->call('lister');
print_r($resultat);
}

function supprimerLivre($titre){
$param = array('titre'=>$titre);
return $resultat = $client->call('supprimerLivre',$param);
}

function ajouterLivre($titre, $auteur){
$param = array('titre'=>$titre,'auteur'=>$auteur);
$resultat = $client->call('ajouterLivre',$param);
}

function trouverAuteur($titre){
$param = array('titre'=>$titre);
return $resultat = $client->call('trouverAuteur',$param);
}
}
?>

et indexCatalogue.php
<?php
require('ClientCatalogue.php');
$catalogue= new catalogue();
$catalogue->lister();

?>

C'est là que se pose mon problème.
En fait je fais le test juste pour la méthode lister(). Et ça marche. Le hic c'est que la variable $client je ne veux l'intancié qu'une seule fois et si je le fais comme vous le voyez au debut du fichier ClientCatalogue.php ben ca me genere une erreur.

Alors je me demande si vous avez une idée de la marche à suivre. Merci
A voir également:

13 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
20 févr. 2008 à 22:36
Salut,

Déclare cette variable comme étant un membre de ta classe catalogue puis tu l'initialises lors de sa déclaration dans la classe. Et si tu veux qu'il n'y ait jamais qu'une seule et même instanciation de client même si tu instancies plusieurs objets catalogue, tu peux déclarer ton client comme étant statique (il appartient à la classe et non pas à l'objet):
class catalogue
{
    public static $client = new soapclient('http://localhost:8080/axis/ServiceCatalogue.jws');

    function lister()
    {
        $resultat = self::$client->call('lister');
        print_r($resultat);
    }
}

1
je pense que le probleme provien qu'on ne peut pas déclarer un attribut et l'initialiser avec new
1
Salut a tous,
Merci pour votre aide à tous. J'ai réussi à passé en php5. J'ai fait des modification. Donc voila mon fichier ClientCatalogue.php:

<?php

include('C:\Program Files\EasyPHP1-8\www\Client NuSOAP\nusoap-0.7.3\lib\nusoap.php');


class catalogue{

public static $client = new soapclient('http://localhost:8080/axis/ServiceCatalogue.jws');

function lister(){
$resultat = self::$client->call('lister');
print_r($resultat);
}

function supprimerLivre($titre){
$param = array('titre'=>$titre);
return $resultat = $client->call('supprimerLivre',$param);
}

function ajouterLivre($titre, $auteur){
$param = array('titre'=>$titre,'auteur'=>$auteur);
$resultat = $client->call('ajouterLivre',$param);
}

function trouverAuteur($titre){
$param = array('titre'=>$titre);
return $resultat = $client->call('trouverAuteur',$param);
}
}
?>


Quand j'execute le fichier, j'ai l'erreur suivante:
Parse error: syntax error, unexpected T_NEW in C:\wamp\www\Client NuSOAP\ClientCatalogue.php on line 8
0
Aller les amis svp aidez moi!!!
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ok c'est bien ce que j'ai fait mais ca me genere l'erreur suivante:
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\program files\easyphp1-8\www\client nusoap\ClientCatalogue.php on line 7
-1
C'est la ligne ou il y a le public static truc?
Tu es sûr que tu as php 5?
-1
Comment sait on kel version on utilise?
-1
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
20 févr. 2008 à 23:22
Avec cette fonction:
http://fr3.php.net/manual/fr/function.phpversion.php
-1
LOL c'est bon apparement j'ai remarqué que j'était en 4.x
Comment faire pour passer à la version 5.x
-1
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
20 févr. 2008 à 23:43
:-)

Ben ça dépend de ce que tu utilises en ce moment. Si tu utilise un paquetage comme wamp ou easyphp (la il faut installer la dernière version), ou si tu utilises apache/php individuellement (là il faut réinstaller une version 5 de php et éventuellement retoucher la config d'apache).
-1
Svp aidez moi c'est vraiment galere tout ca.
-1
ya vraimen personne qui peut m aider
-1
salut à tous,
alors voilà j'ai réussi à régler le problème grâce à l'aide d'un ami sans qui j'aurais rien compris :)
Donc voilà:
On crée notre dossier client dans le dossier www de notre serveur (par exemple WampServeur).
Dans le dossier client, on y place le dossier de nusoap et toujours dans client, on crée un fichier catalogue.php qui contiendra notre classe catalogue.

Fichier catalogue.php

<?php>
include("./nusoap-0.7.3/lib/nusoap.php");
class Catalogue{
var $client;
function __construct(){ // Déclaration de notre constructeur
echo "Constructeur";
$this->client=new soapclient('http://localhost:8080/axis/ServiceCatalogue.jws');
}
function lister(){ // Appel de la méthode lister de notre ServiceCatalogue.jws
$resultat=$this->client->call('lister');
print_r($resultat);
}
}
<php>


Toujours dans le dossier client, on y ajoute le fichier index.php suivant:

<?php
include("ClientCatalogue.php");

$catalogue = new ClientCatalogue(); // On instancie la classe catalogue
$catalogue->lister(); // et on appel la fonction
?>


Conclusion: probleme résolu.
Merci à tous.
-1