IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Où placer une méthode rechercher ?


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Où placer une méthode rechercher ?
    Bonjour,

    J'ai fait une classe Voiture disposant de divers attributs et d'une méthode ajouter() qui réalise l'insertion dans la base.

    Je crée maintenant un formulaire pour afficher toutes les voitures de ma base.

    Je pense qu'il ne faut pas mettre la méthode rechercher() dans la classe Voiture mais je ne sais pas où la mettre. Je peux la mettre directement dans mon script PHP en utilisant directement la fonction executeRequete() de mon objet Connexion mais je pense qu'il y a mieux à faire.

    Pouvez-vous m'aider ?

    Merci

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    SI tu nous montrais un peu de code svp ?
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Invité
    Invité(e)
    Par défaut
    La classe voiture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    class Voiture
    {
    private $marque;
    private $couleur;
    private $nbporte;
    private $connexion;
     
     
    public function __construct($marque, $couleur, $nbporte, $connexion)
    {
    $this->marque=$marque;
    $this->couleur=$couleur;
    $this->nbporte=$nbporte;
    $this->connexion=$connexion;
    } 
     
    public function ajouter()
    {
    $resultat = $this->connexion->executerRequete("Insert into voiture (marque, couleur, nbporte) values ( '$this->marque', '$this->couleur', '$this->nbporte')");
    }
    }
    ?>
    La fonction executerRequete() de la classe Connexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public function executerRequete ($requete) 
        {return mysql_query ($requete, $this->connexion);  }
    Le script PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    require_once ("Connexion.class.php");
    require_once ("Voiture.class.php");
    $connexion = new Connexion("localhost", "root", "", "baseV");
    $voiture = new Voiture("Audi", "Grise", "5", $connexion );
    $voiture->ajouter();
    ?>

  4. #4
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Moi je mettrais effectivement la méthode rechercher() dans ta classe connexion , avec comme paramètre le type d'objets a chercher ....
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je ne vois pas ce que tu veux dire avec l'objet en paramètre.

    Je pensais appeler la fonction rechercher disponible dans la classe Connexion en lui passant la requête en paramètre.

    Ensuite, soit je retourne le résultat soit j'appelle une autre fonction de parcours du résultat disponible dans la classe Connexion.

    Je pense que c'est une solution de débutant que je suis mais j'aimerai avoir l'avis d'une personne confirmée comme toi.

    Merci

  6. #6
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    TU peux faire comme ceci aussi .

    Disons que ma solution te permet de prévoir le cas ou tu as autre chose que des voitures a chercher ..lol
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  7. #7
    Invité
    Invité(e)
    Par défaut
    En passant la requête en paramètre, je peux rechercher d'autre choses non ?

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Salut,

    n'as tu pas penser à créer une classe Voitures qui permet de manipuler plusieurs instances voitures ? Et dans laquelle la méthode rechercher aurait tout naturellement sa place.

    bye

  9. #9
    Invité
    Invité(e)
    Par défaut
    Je n'y ai pas pensé. Je débute

    Je ne vois pas bien le fonctionnement d'une telle classe.

    Merci pour votre aide.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Ben c'est normal de débuter.

    Pour son fonctionnement cela donnerai...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Voitures extends ArrayObject
    {
    	public function lire()
    	{
    		$retour = new Voitures();
    		$sql = "select * from voiture";
    		$query = mysql_query($sql);
    		$res = mysql_fetch_array($query);
    		while( $res = mysql_fetch_array($query) )
    			$retour->append( new Voiture( $res["nom"], $res["marque"], $res["id"] ) );
    		return $retour;
    	}
    }
    L'idée est d'avoir une classe Voitures qui se comporte comme un tableau (d'où l'héritage de ArrayObject), mais un tableau d'objet Voiture.
    Aussi, c'est cette classe qui se charge d'aller lire la base de données afin d'extraire plusieurs instances de voitures d'un seul coup.
    Mais d'une manière générale elle travaille sur des listes de Voitures et non 1 seule Voiture.
    Ici seul la méthode lire est implémentée, elle permet de récupérer toutes les voitures dans un tableau pour les manipuler ensuite.


    Le code n'est volontairement pas adapté à ce que tu as écris plus haut, pour que tu l'implémentes par toi même.

    bye

  11. #11
    Invité
    Invité(e)
    Par défaut
    Merci. Je commence à comprendre.

    1) $retour = new Voitures();

    On crée un objet Voitures dans la classe Voitures ?

    2) $retour->append( new Voiture( $res["nom"], $res["marque"], $res["id"] ) );

    Je pense que append sert à ajouter une ligne au tableau mais pas sûr.

    3) Pour pouvoir utiliser new Voiture, il faut avant class Voitures { mettre require_once ("Voiture.class.php"); ?

    4) Si on a un seul résultat alors la solution est toujours bonne non ?

    Merci

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Euuuuhhh que dire ??

    Oui ; ) c'est tout à fait cela.

    Ceci dit, tu me fais penser que j'ai oublier un mot clé très important... static

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Voitures extends ArrayObject
    {
    	public static function lire()
    	{
    		$retour = new Voitures();
    		$sql = "select * from voiture";
    		$query = mysql_query($sql);
    		$res = mysql_fetch_array($query);
    		while( $res = mysql_fetch_array($query) )
    			$retour->append( new Voiture( $res["nom"], $res["marque"], $res["id"] ) );
    		return $retour;
    	}
    }
    Car si tu ne mets pas ce mot clé alors tu execute la méthode dans une instance de Voitures, il serait donc inutile de fournir un nouvel objet... Il suffirait de vider l'existant et de le re remplir. Il y à un pattern à ce sujet il me semble, mais j'ai oublié son nom...

  13. #13
    Invité
    Invité(e)
    Par défaut
    J'ai réussi.

    1) Pour le moment, j'appel la fonction lire par Voitures::lire($connexion).
    Je pense que je peux modifier les paramètres de lire afin de passer la requête mais pas sûr.

    2) Je voudrais savoir pourquoi on crée l'objet Voitures dans la classe et non pas dans le script?

    3) Avec ce fonctionnement, il faut une classe tableau par objet. Donc une pour Voitures, une pour Motos, une pour Utilisateurs, ...
    Est-il possible de ne faire qu'une classe nommée par exemple Resultats et en fonction de l'objet passé en paramètre du constructeur ou de la fonction lire suivant la réponse à la question 2, un switch choisirait l'instruction à exécuter.

    Merci pour votre aide.

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    1/ Oui tu peux, après c'est un choix. Moi je fait cela pour une raison simple, je ne veux pas éparpiller mon schéma de base de données au travers du site. Lorsque j'ai une modif du schéma à faire, je sais que cela n'impacte que les classes (en l'occurence cela ce limite régulierement à une paire de classe : Voiture et Voitures), et après éventuellement les pages du sites.

    2/ Car on fait un appel static. On utilise une méthode propre à la classe Voitures et non 1 une Instance de Voitures.
    C'est encore une histoire de choix... Perso je fais sa en static car cela me permet de faire le distingo entre une méthode qui travaille avec ou sans la base de données. D'autres s'en foutent et ne travaillent qu'avec des méthodes d'instance.

    3/ Oui. et Oui. Tu peux imaginer une méthode d'une classe qui reçoit une requete et un nom de classe en parametre.
    Cependant, il te faudra déléguer la création de l'instance Voiture à la classe Voiture car la classe de Resultats ne connait pas la structure de voiture. Donc la classe voiture doit se voir ajouter une méthode qui prend en parametre un tuple sql, et retourne un objet voiture construit depuis ce tuple.

    L'autre possibilité, bien plus complexe, et de lire les propriétés de la classe et de les mettre en rapports avec les champs du tuple afin de lier dynamiquement au niveau de la classe résultats les valeurs aux propriétés de l'objet.

    bye

  15. #15
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse très claire.

    Je pense que je vais conserver une classe tableau par objet. Cela sera plus clair.

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Je pense aussi. Fais simple au début, mais performant. Tu feras pratique et utile quand tu seras plus familiarisé avec les possibilité du langage.

Discussions similaires

  1. Où placer une méthode d'une table de relation porteuse
    Par vince-nantes dans le forum Langage
    Réponses: 6
    Dernier message: 11/12/2013, 09h58
  2. placer une méthode dans une classe
    Par totoche dans le forum UML
    Réponses: 8
    Dernier message: 29/05/2008, 17h04
  3. Réponses: 1
    Dernier message: 05/07/2007, 08h34
  4. recherche d'une méthode java
    Par garzouille dans le forum Langage
    Réponses: 4
    Dernier message: 15/05/2007, 12h11
  5. A la recherche d'une méthode souple
    Par vallica dans le forum Java EE
    Réponses: 15
    Dernier message: 24/03/2006, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo