Developpez.com - Rubrique PHP

Le Club des Développeurs et IT Pro

Les meilleurs débats et sondages PHP : langage / outils / scripts etc.

Le 2007-01-20 17:59:10, par Community Management, Community Manager
Bonjour

ma question et la suivante :

Comment bien programmer en PHP ?

Donc si vous avez des conseils, des truc à utiliser/éviter et d'autres choses.

Par exemple :
Code le plus court :
Code :
1
2
3
4
for ($i=0; $i<count($array); $i++)
{
  echo $array[$i];
}
Code le plus rapide :
Code :
1
2
3
4
5
$count = count($array);
for ($i=0; $i<$count; $i++)
{
  echo $array[$i];
}
Merci d'avance
  Discussion forum
257 commentaires
  • N1bus
    Expert confirmé
    Bonjour,

    pour ma part :

    - Bien indenter le code pour une meilleure lisibilité
    - Bien commenter le code , même si ça prend du temps. Tu seras content dans 6 mois d'avoir pris le temps de commenter ton code . . .
  • marcha
    Rédacteur
    Envoyé par Sub0
    Pourrais-tu me dire pourquoi tu n'y crois plus ?
    J'ai cru qu'il fallait toujours optimiser son code, et je n'y crois plus parce
    qu'une optimisation n'est nécessaire que si il y a un besoin réel et pas
    juste hypothétique.

    J'ai souvent pensé qu'un code optimisé était en sois meilleur. Mais il est souvent
    moins clair, plus difficile à maintenir, et il arrive qu'il soit remplacé par un nouveau
    produit avant même d'avoir atteint ses limites.

    Mais il est vrai, que c'est un vrai plaisir d'optimiser son code... mais on devrait le
    faire que lorsqu'il s'avère que c'est économiquement nécessaire et pas avant !
  • Sub0
    Expert confirmé
    Salut!

    • Toujours bien mettre en place un algo, voir un cahier des charges bien pensé avant de se plonger dans le code. Pour cette étape, il est important de connaître les règles de sécurité, quelles peuvent être les failles : http://php.developpez.com/faq/?page=securite

    • Perso, je sépare bien les "unités" de mon programme, par exemple :
    cfg.php // Constante et variable de configuration
    bbd.php // Fonctions d'accès à la base de données
    func.php // Diverses fonctions, conversion, traitement
    mail.php // Fonctions d'envoi de mail
    forms.php // Formulaires html de saisie
    etc...
    J'inclus les unités les unes aux autres avec Require_once().

    • J'utilise les tableaux pour les constantes, variables, données... et la commande global pour les intégrer dans mes fonctions. Par exemple, dans le script "cfg.php", tu trouveras :
    Code :
    1
    2
    3
    4
    5
    6
    $cfg['db_server']  = 'localhost';         // Nom du serveur
    $cfg['db_name']    = 'mybase';            // Nom de la base
    $cfg['db_table']   = 'membres';           // Nom de la table
    $cfg['db_login']   = 'root';              // Le login d'accès de la base
    $cfg['db_pass']    = '';                  // Le mot de passe de la base
    $cfg['linkid']     = '';                  // Handle de la connection
    Et dans le script "bdd.php" :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Require_Once('cfg.php');
    Require_Once('func.php');
    
    //============================================================ 
    //  CONNECTION A LA BASE DE DONNEES
    //============================================================
    function OpenBase($first=false){
      global $cfg;
    
      //----------------------------------------------------------
      // Déjà connecté -> Exit
      //----------------------------------------------------------
      if(!empty($cfg['linkid'])) return true;
    
      //----------------------------------------------------------
      // Test de connection su serveur
      //----------------------------------------------------------
      if(!$cfg['linkid']=@mysql_connect(
        $cfg['db_server'],
    • Je commente bien mon code (mais pas trop) et j'utilise des séparations pour améliorer la lisibilité et structurer le code. Je n'utilise pas de tabulation, que des espaces car d'un éditeur à l'autre, la valeur des tabulations peuvent être différentes et desindenter ton code. Le résultat est assez surprenant parfois.

    • J'utilise les simples quotes dans tous les cas, excepté pour encadrer les requêtes SQL où j'utilise les doubles quotes, car avec mon editeur PHP, il est possible de choisir une couleur différente. Ainsi, je repère tout de suite où se trouvent les requêtes SQL.

    • J'utilise de péréférence des "echo" pour intégrer du code HTML, CSS ou Javascript dans mes scripts PHP. J'évite de fermer les balises PHP (?> ou sinon, je mets tout le code HTML, CSS ou Javascript dans un autre fichier.

    • Bien garder à l'esprit que ton code sera probablement lu par d'autres développeurs.
  • cedricgirard
    Membre averti
    Très vaste sujet mais
    Envoyé par fadex
    Par exemple :
    Code le plus court :
    Code :
    1
    2
    3
    4
    for ($i=0; $i<count($array); $i++)
    {
      echo $array[$i];
    }
    Code le plus rapide :
    Code :
    1
    2
    3
    4
    5
    $count = count($array);
    for ($i=0; $i<$count; $i++)
    {
      echo $array[$i];
    }
    Merci d'avance
    Je préconise
    Code :
    foreach($array as $valeur) echo $valeur;
    C'est plus court, plus lisible qu'un for(), et honnêtement la performance à ce niveau on s'en fiche un peu. Comme disait l'auteur de "le zen de l'optimisation du code", optimise au max mais uniquement là où tu peux mesurer un gain utile.

    Par ailleurs je n'ai pas encore lu les 11 pages de réponses, mais pour moi bien programmer en PHP c'est d'abord
    - du code concis, lisible, qui fait uniquement ce qui est utile, des variables/fonctions bien nommées, un code que l'on puisse remanier si le besoin se précise ou qu'il change
    - des tests unitaires et fonctionnels
    - des règles respectées : register_global à off, oubli des parties qui seront désactivées en PHP6 (long array par exemple), éviter les globals
    - coder avec l'affichage des erreurs au max et n'en laisser passer aucune
    - capter toutes les erreurs qui surviennent sur un site en production et les corriger (ou en tout cas les gérer) au fur et à mesure
  • cedricgirard
    Membre averti
    Envoyé par Pascal22
    S'il est effectivement évident que c'est une bonne pratique d'un point de vue applicatif, en est-ce réellement une d'un point de vue site web (referencement par ex. ) ?
    Car si je ne me trompe, plus d'url rewriting (une url unique pour l'acces au serveur)
    Je ne vois pas le rapport entre MVC et l'usage d'une URL unique.
    Ergonomiquement l'URL unique est une hérésie, surtout maintenant que l'on sait faire des URL qui expriment quelque chose et ne dépendent plus de l'organisation technique du serveur.
  • Benjamin Delespierre
    Expert éminent
    La solution que j'ai trouvé à ce problème est de désactiver les updates des modules qui marchent parfaitement

    Et ce pour 2 raisons:
    - C'est vrai, la gestion des plugins et des dépendances dans Eclipse peut devenir une vraie galère
    - Une fois qu'on à un environement stable et correctement configuré, on n'a pas forcément envie de se prendre 5 updates par semaine dans les dents.

    ça fait deux ans que j'ai pas updaté PDT et je touche du bois
  • sekaijin
    Expert éminent
    ça n'optimise rien du tout un if avec ou sans accolade c'est le même temp de traitement. les différentes syntaxe de if sont toute identique le compilateur php va générer le même code exécutable.

    de façon générale la présence d'accolade ne change pas le temps d'éxécution
    en fait la seule différence que peut introduire la présence d'accolades dans du code est la création d'un contexte de portée des variables. soit quelque chose de l'ordre de la micro seconde.

    le pire dans tes exemples c'est
    Code :
    return = (empty($val)) ? true : false;
    la tu n'optimise absolument rien pire tu introduit du code inutile
    Dans ce code tu appelle la fonction empty en lui passant un variable. cette fonction var retourner true ou false.
    l'opérateur ternaire va alors évaluer cette valeur et si elle vaut true va retourner la première valeur sion la seconde. celle-ci sera placé dans return.

    Alors que
    Code :
    return = empty($val)
    la fonction est évaluée et returne true ou false qui est directement placé dans return pas d'évaluation du résulta pas de branchement dans le code généré.

    il ne faut pas confondre le code concis et optimisation. souvent un code compact n'est pas le plus optimal.

    A+JYT
  • Spartacusply
    Membre expert
    Étant donné que php est utilisé pour produire des pages webs dynamiques, ne serait-il pas plus judicieux de n'utiliser que du php sur une page ?
    Non, il y a plein d'inconvénients à cette méthode, la première étant que tu perds la coloration syntaxique, l'indentation, difficile de savoir si ton HTML est bien formé en un clin d'oeil. Bref, beaucoup plus difficile de décoder ton HTML. Il convient de réserver le php aux zones qui sont vraiment dynamiques.

    - Quand c'est un array, je rajoute "_a" au bout du nom de la variable ou du nom de la fonction.
    Je préfère privilégier le castage et l’initialisation des variables (qui n'est pourtant pas obligatoire en php) afin de savoir ce que contient ma variable.

    Je rajoute des "\n" dans les fonctions d'affichage, afin que le code source de la page soit plus lisible.
    Moi je dirais le contraire, ça rend le code source totalement illisible. Je préfère quand même ça :

    Code :
    1
    2
    3
    $html = '<form action="avis.php" method="post" name="avis">
        <label for="pseudo">Pseudo</label>
        <input type="text" name="pseudo" size="106" maxlength="30"><br></form>';
    Même si bon comme dis plus haut, c'est loin d'être la meilleure méthode.
  • fadex
    Membre régulier
    Merci

    Donc est ce qu'il y a des normes à suivre, parce que parfois on arrive à des situations ambiguës (usine a gaz).

    Par contre en java il existe plusieurs solutions permettant de structurer la programmation.

    Donc si vous avez des exemples d’architecture ou des projets (perso) qui se base sur des architectures (MVC par exemple).
  • Sub0
    Expert confirmé