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 :

Comment bien programmer en PHP ? [Débat]


Sujet :

Langage PHP

  1. #81
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Nous sommes sur un forum d'aide a la base... et donc nous sommes censés aider plus ou moins des gens a mettre au point leurs scripts... Or je dirais que peut etre 30% des problemes peuvent etre résolus avec la regle n°1 ou n°2.
    Tout cela est évidemment a utiliser en phase de conception, pas de production... personnellement, AUCUNE requete ne s'affiche sur mon site, meme en cas d'erreur, mais je les logs quand meme dans un fichier a part pour détecter ce qui ne va pas.

  2. #82
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Justement, nous nous adressons nouvent à des néophytes qui ne font pas forcement la différence entre la phase de conception/test et la phase de fonctionnement. Il est important de préciser pour ces personnes.

  3. #83
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    ne jamais écrire sur la sortie et la question des perfs ne se pose pas
    Salut,
    tu peux être plus clair, stp ?
    Vive les roues en pierre

  4. #84
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    tu ne fais aucun echo en cours de route tu construit ta sortie dans un buffer et tu ne fais qu'un seul et unique print ou echo

    tu n'auras donc pas à te poser la question des perfs sur les différentes façon de faire un echo.

    de plus si aulieu de construire une chaine de caractère qui contient le HTML à générer tu construit un arbre (objet ou array) contenant les élément à afficher

    tu peux produire à la fin un format totalement différent de celui-ci au quel tu pensais au départ sans modifier ton programme.

    enfin si tu trouve que ton script à une fonction que tu peux réutiliser ailleur il devient simple d'en faire une fonction

    et pour finir qi pendant l'utilisation de ton script on relève un pb il est facile de savoir si c'est un pb d'affichage et donc tu ne touche qu'à l'affichage qui ets à un seul endroit ou si c'est fonctionnel auqu'el ca tu touche la fonction sans risque de casser l'affichage

    ça s'appelle la séparation des couches et c'est vieux comme l'informatique

    A+JYT

  5. #85
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    Citation Envoyé par sekaijin
    tu ne fais aucun echo en cours de route tu construit ta sortie dans un buffer et tu ne fais qu'un seul et unique print ou echo

    tu n'auras donc pas à te poser la question des perfs sur les différentes façon de faire un echo.

    de plus si aulieu de construire une chaine de caractère qui contient le HTML à générer tu construit un arbre (objet ou array) contenant les élément à afficher

    tu peux produire à la fin un format totalement différent de celui-ci au quel tu pensais au départ sans modifier ton programme.

    enfin si tu trouve que ton script à une fonction que tu peux réutiliser ailleur il devient simple d'en faire une fonction

    et pour finir qi pendant l'utilisation de ton script on relève un pb il est facile de savoir si c'est un pb d'affichage et donc tu ne touche qu'à l'affichage qui ets à un seul endroit ou si c'est fonctionnel auqu'el ca tu touche la fonction sans risque de casser l'affichage

    ça s'appelle la séparation des couches et c'est vieux comme l'informatique

    A+JYT
    J'acquiesse, et je rajouterais pour Fladnag que non seulement sa méthode de débuggage est ouverte, mais qu'en plus en étant organisé on prévoit de conduire l'erreur (via trigger ou exception) de manière propre, et ce avec une couche logique dédiée à la gesion des données.

  6. #86
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Si t'as une fonction displayX(), est-ce qu'il y a un intérêt de créer une variable supplémentaire dans celle-ci plutôt que d'écrire directement sur la sortie ?
    Vive les roues en pierre

  7. #87
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    Avec une variable, on fait ce qu'on veut. On peut par exemple décider d'enregistrer le résultat dans un fichier au lieu de l'afficher et ce en changeant juste l'instruction finale.

  8. #88
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    J'ai eu le cas ressemement
    j'avais une page qui retournais un ensemble d'info à l'utilisateur
    quelqu'un ma demandé si on pouvais avoir la même chosesous forme de service Web

    au lieu de retrourner du HTML je retourne du XML (SOAP)
    Je n'ai touché à aucune ligne de code seul le formatage à été impacté

    A+JYT

  9. #89
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    je me fais l'avocat du diable (je sais, c'est pas bien ;o) mais si on a un script bourré d'"echo" partout, rien n'empeche d'avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ob_start();
    ... // script tout pourri avec des echo
    $sortie=ob_get_contents();
    ob_end_clean();
    // faire ce qu'on veux avec $sortie
    bon evidemment c'est a eviter quand on peux faire autrement ;o)

  10. #90
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Quelle est la bonne arborescence pour un projet/site en php ?
    histoire de séparer les class, les includes, les pages, les images ? (ainsi que les scripts JS, CSS et autres)


    Et dans un script, lorsque qu'on a accède plusieurs fois à $_POST['mail'] par exemple, vaut il mieux l'enregistrer dans une variable ( $mail = $_POST['mail']; ) ou peut on a chaque fois faire appel à $_POST['mail'] tout au long de la page, sans augmenter le temps d'exécution, les ressources consommer, etc...

    Merci

  11. #91
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par Fladnag
    je me fais l'avocat du diable (je sais, c'est pas bien ;o) mais si on a un script bourré d'"echo" partout, rien n'empeche d'avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ob_start();
    ... // script tout pourri avec des echo
    $sortie=ob_get_contents();
    ob_end_clean();
    // faire ce qu'on veux avec $sortie
    bon evidemment c'est a eviter quand on peux faire autrement ;o)
    Oui mais pourquoi faire sale quand si on y pense dès le début on peu faire propre

    attention il faut dans ce cas là penser qu'il y a peut-être déjà un truc crade avec ob_start et donc penser à Gérer plusieurs buffer il faut donc écrire des callback approprié pour gérer correctement les imbrications de ob_start

    du coup les perf en prennent un grand coup car non seulement on utilise des echo plus couteux que des affectation de chaines pour les dérouter dans ob_start qui lui même utilise de collback pour faire l'affectation

    c'est tout de même beaucoup plus simple de faire des affectation d'une variable

    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
    function &makeTop($mesparams) {
       ...
       $top->title = 'mon titre';
       $top->soustitle = 'mon sous titre';
       return $top;
    }
     
    function &makeUser($mesparams) {
       ...
       $user->name = $mesparams['nom'];
       $user->profile = 'Administrateur';
       return $user;
    }
    ...
     
    var $outBuffer = new stdClass();
    $outBuffer->entete = makeTop($mesparams);
    $outBuffer->contenu = ...
    $outBuffer->contenu->utilisateur  = makeUser($mesparams);
     
    displayHasHTML($outBuffer);
    C'est simple est efficace pourquoi se casser la tête
    si tu as une modif d'affichage elle est obligatoirement dans la fonction Display
    si tu as une modif de traitement elle est obligatoirement dans la fonction idoine

    A+JYT

  12. #92
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Le MVC c'est bien pour la maintenance mais moins pour les perfs ^^ La séparation peut tout du moins être faite à un autre niveau, sans buffer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class User
    setParams();
    getSqlDatas();
     
    class GUser extends User
    toHTML() {
    echo '<h1>'.$this->name.'</h1>';
    }
    toXML() {
    echo '<user><name>'.$this->name.'</name></user>';
    }
    Ca revient au même, en plus rapide, à mon avis.


    Pour ce qui est de l'utilisation des tableaux $_POST etc. si tu copies ta valeur dans une autre variable tu ne sais plus d'où elle vient alors qu'en utilisant $_POST['mail'] c'est lisible tout de suite. Après ca dépend si tu la passes dans une méthode d'objet, ca va un peu à l'encontre du principe d'encapsulation d'utiliser des globales. Tu peux aussi utiliser des préfixes pour savoir si tes données ont été vérifiées/cleanées mais en PHP la question se posent moins étant donné que les variables externes sont dans des tableaux $_POST, $_GET, etc (donc tu sais justement que les valeurs sont pas clean tant que tu les prends dans les tableau).
    Pour ce qui est de l'arbo personnellement je fais au plus simple :

    css
    --layout.css
    --text.css
    --classes
    ----user.css
    inc
    classes
    -- user.class.php
    js
    img
    etc.

    avec des htaccess dans les rép accessibles uniquement par PHP
    Vive les roues en pierre

  13. #93
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Ne pas dépasser 76 caractères par ligne : pensez à ceux qui ont de petits terminaux.
    Documentez votre code (phpDocumentor).
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  14. #94
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    Citation Envoyé par Shinuza
    Faux.
    Utilisé avec avec des virgules echo se comporte comme une fonction, et reçoit ainsi plusieurs paramètres qui sont envoyés au tampon de sortie sous la forme d'une seule chaine.
    Avec des points on crée autant d'objets en mémoire que de littéraux.
    Penchons-nous plus précisément sur le problème.

    Comment echo peut-il envoyer plusieurs arguments sur la sortie ?
    Les seules solutions sont utiliser la concaténation (or, si utiliser des virgules ou des points revenaient au même, ça se saurait) ou s'appeler lui-même plusieurs fois de suite.

    Conclusion : utiliser echo avec la virgule revient bien à appeler echo plusieurs fois de suite.

  15. #95
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Nimporte quoi mdr.
    Soit tu fais la concaténation en php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo('tralala' . 'trucmachin' . 'tralalatsointsoin');
    ou tu demande à php de le faire en c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo('tralala', 'trucmachin', 'tralalatsointsoin');

  16. #96
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    Au final, la concaténation est de toutes façons faite en C, non ?

    De plus, il y a des cas ou le point est plus rapide que la virgule, je ne pense donc pas que le niveau où se fait la concaténation soit si elle existe la seule différence.

  17. #97
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Je ne pense pas que l'usage direct de echo soit une bonne pratique. Je pense qu'il faut utiliser un systême de templates.
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  18. #98
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Là n'est pas la question is_null ^^

  19. #99
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Citation Envoyé par Korko Fain
    Là n'est pas la question is_null ^^
    En même temps débattre sur le point ou la virgule ce n'est pas vraiment une question de grande importance.
    Surtout que c'est le genre qui ont des chances d'être modifiée par l'équipe de php afin de l'améliorer....

    Ce post devrait plutot débattre de technique,choix de conception, d'écriture un peu plus universel à toutes les versions de PHP plutot qu'à quelques broutilles...

    Une question qui me trotte dans la tête depuis un bout de temps et à laquelle je ne trouve pas de réponse absolue.

    Pour ceux qui développe en OO, lorsque vous concevez vos classes d'accès aux données.
    Celles-ci respectent t'elle précisèment la structure de votre base de données (une classe = une table), ou bien cassez vous la structure de votre base de données lors du passage en objet (une classe peut piocher dans plusieurs tables) ?

    Perso j'ai opté pour la première méthode, cependant cela n'est pas toujours adapté car ce que l'on peut faire en une requete via la bdd, je le fait en N requetes en utilisant le modèle objet....
    En même temps j'ai la hantise d'éparpiller mon modéle de données dans mon modèle objet car lors d'une mise à jour cela imposera de vérifier plus de codes, et certaines portions passeront surement à la trappe.
    Ce qui in fine créera de nouveaux bugs...

    Vous concernant quels choix avait vous fait ?

    bye

  20. #100
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Personnellement, une classe = un objet précis. Une table n'est pas forcément égal à un objet car un objet peut avoir plusieurs attributs qui sont répartis dans plusieurs tables dues aux multiplicités.

    Et ma classe ne "pioche" pas dans les bases car elle n'y accede pas, elle demande à une classe DB les informations et elle seule connait la syntaxe de mes tables et communique avec la base.

Discussions similaires

  1. Comment commencer à programmer avec PHP, SQL-Server 2000
    Par DevLib dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/05/2012, 12h51
  2. Comment bien programmer web en java?
    Par lovelace dans le forum Développement Web en Java
    Réponses: 11
    Dernier message: 19/10/2008, 01h40
  3. Comment bien commencer la Programmation
    Par Le_Faya dans le forum Débuter
    Réponses: 6
    Dernier message: 01/12/2006, 19h39
  4. Comment bien programmer en C ?
    Par lastrecrue dans le forum C
    Réponses: 14
    Dernier message: 12/07/2006, 13h44

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