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 :

PHP et algorithmie


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut PHP et algorithmie
    Bonjour,

    Je developpe un site Web en php5. J'ai cree tout un tas de classe, et je me soucis beaucoup de l'optimisation du code, plus au niveau de la lecture et de la logique pour le moment que au niveau du temps d'execution. En fait, c'est un bout de site CMSise qui va me resservir, donc plus je developpe des outils performants et plus j'irai vite pour la suite ...

    Voila pour les presentations, passons a ma question.

    Alors suivez moi :

    Je veux afficher des catégories contenues dans une table SQL. Pour ce faire :
    - J'initialise ma classe LesCategories avec des requete SQL d'une classe requeteBDD (les anciens etudiant IG reconnaitrons :-))
    - qui elle meme ajoute des elements Categorie d'une classe categorie
    - et les stocke dans une liste collection d'une classe collection
    - qui elle meme est definie par le type listeDoublementChainee qui provient d'une classe liste

    Ma tache la, c'est creer un select/option html avec la liste des categories.

    Comme un cochon, je creerai ca dans ma classe LesCategories :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function retournerCategories() {
      print "<select>";
      for($i=0;$i<$this->lesCategories->cardinal();$i++) {
        print "<option value='{$this->lesCategories->extraire("idCategorie")}'>$this->lesCategories->extraire("nomCategorie")</option>";
     }
      print "</select>";
    }
    Mais "il parait" qu'il faut eviter de mettre du code HTML dans les classes, et c'est vrai que quand je regarde ce qui se fait sur le net, on fini toujours par des "return", et quasi jamais avec du html dedans.

    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function retournerCategories() {
      return $this->lesCategories
    }
    Cette solution me parait un peu sterile ...

    Une meilleure solution chers specialistes ?

    D'avance merci.



    Matt

  2. #2
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Mais "il parait" qu'il faut eviter de mettre du code HTML dans les classes,
    Oui et non. Disons qu'il ne faut pas en mettre dans n'importe quelle classe.
    Pour un cas comme ca, je retournerai dansl a fonction retournerCategories, un tableau "identifiant" "valeur".

    Et a coté, je ferai une classe d'affichage, avec une méthode static genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    generateurHtml::creerSelect($tab)
    Et c'est cette méthode là qui va lister les éléments de ton tableau et creer ton code html.

    Comme ca, ton code html généré est a un seul endroit et tu pourra le réutiliser a chaque fois que tu veux faire un select, pour peu que tes classes qui vont chercher les données les sortent dans un format standard.

  3. #3
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut
    La classe affichageHMTL, je n'y avait pas pense, pourquoi pas, je vais m'y pencher mais ca m'a l'air bien propre :-).

    Mais j'ai une question stupide, dans la logique, puisque j'ai cree un systemem de listes chainees,ne devrais-je pas me restreinte a n'utiliser que ce systeme plutot qu'un tableau ? (non pas pour le plaisir de me restreindre, mais pour avoir un algo coherent)

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Perso je vois pas bien l'intérêt des listes chainée dans ton affaire , c'est certes plus rapide qu'un tableaux dans un langage ou ces liste "existe" , mais en php ou les pointeurs ne sont pas utilisables je vois pas bien l'utilité face a des tableaux qu'on peut manipuler comme bon nous semble.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut
    J'ai cree ce systeme a cause de la gestion des index de tableau, c'etait ingerable de supprimer des entrees et de reafficher les contenus ... meme apres des tris ..., mais dans le cas present, le probleme ne se poserai pas.

    Comme tu dis, les pointeurs n'existent pas, et il a fallu contourner ce maque par des astuces, mais le resultat est relativement rapide et tres fonctionnel puisque sur mesure.

    Ce qui ne repond pas vraiment a ma derniere question, a savoir, dois-je utiliser les 2 types, listes ET tableaux ?

  6. #6
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut
    J'ai une autre question alors que je m'attelle a realiser ta solution :

    Je cree dans ma classe une fonction du genre :
    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
     
    	function retournerCategories() {
     
    		$cardinal = $this->lesCategories->cardinal();
    		$this->lesCategories->deplacerPointeur();
    		$resultat = array();
     
    		for($i=0;$i<$cardinal;$i++) {
     
    			$resultat[$i][] = $this->lesCategories->extraire("idCategorie");	
    			$resultat[$i][] = $this->lesCategories->extraire("nomCategorie");
     
    		$this->lesCategories->deplacerPointeur('+');	
     
    		}
     
    		return $resultat;
    Mais ca fait un peu redondance car j'ai deja une liste d'objet categories stockee dans $this->lesCategories.

    Du coup en faisant ca, je transforme ni plus ni moins ma liste en tableau. C'est mieux ?


    [J'ai edite mon post parce que j'avais ecris une enormite dans mon code ^^]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EDI] Quel est l'éditeur que vous recommandez pour PHP ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 400
    Dernier message: 10/04/2018, 21h08
  2. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 08h45
  3. L'avenir est-il au PHP ?
    Par Manolo dans le forum Langage
    Réponses: 468
    Dernier message: 11/02/2008, 19h54

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