Débat : Comment bien programmer en PHP ?

Le , 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 : Sélectionner tout
1
2
3
4
for ($i=0; $i<count($array); $i++) 
{ 
  echo $array[$i]; 
}
Code le plus rapide :
Code : Sélectionner tout
1
2
3
4
5
$count = count($array); 
for ($i=0; $i<$count; $i++) 
{ 
  echo $array[$i]; 
}
Merci d'avance


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Shuty Shuty - Membre éprouvé http://www.developpez.com
le 03/01/2014 à 14:32
De manière quotidienne, j'essaie de minimiser et d'optimiser au maximum mon code.

Je suis un grand amoureux de l'optimisation, des opérateurs ternaire:

Code : Sélectionner tout
return = (empty($val)) ? true : false;
J'évite au maximum les accolade dans mes structure de contrôle:

Code : Sélectionner tout
1
2
if(isset($_GET['mdp']) 
              echo 'mdp existe';
Un de mes autres péché mignon c'est les ":"

Code : Sélectionner tout
1
2
3
4
5
if(isset($value)): 
   // code 
else: 
   // code 
endif;
L'optimisation c'est bien mais c'est à accompagner par des commentaires
Avatar de sekaijin sekaijin - Expert éminent http://www.developpez.com
le 03/01/2014 à 20:13
ç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 : Sélectionner tout
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 : Sélectionner tout
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
Avatar de ABCIWEB ABCIWEB - Expert éminent http://www.developpez.com
le 03/01/2014 à 22:20
Citation Envoyé par sekaijin  Voir le message
il ne faut pas confondre le code concis et optimisation. souvent un code compact n'est pas le plus optimal.
A+JYT

C'est pas faux, d'ailleurs j'avais des bench avec opérateurs ternaire vs accolades et bien souvent les accolades étaient plus rapides bien que plus verbeuses à écrire.

Mais bon la différence est infime et cela ne m'empêche pas d'utiliser abondamment les opérateurs ternaires parce que pour moi optimisation du code veut dire aussi facilité de lecture et ce n'est pas à ce niveau là qu'on optimise réellement la rapidité d'exécution
Avatar de Tsilefy Tsilefy - Membre chevronné http://www.developpez.com
le 03/01/2014 à 23:35
La seule optimisation qui vaille, c'est OpCache ou APC.

Le reste, c'est gagner des microsecondes (c'est-à-dire rien par rapport au temps de traitement d'une requête web et au chargement d'une page) en échange d'une illisibilité qui va faire perdre un temps précieux lorsque quelqu'un d'autre va reprendre le code plus tard pour le modifier. Un code clair et facile à maintenir + une cache d'opcode est bien mieux que toute tentative par d'optimisation par le développeur.
Avatar de ABCIWEB ABCIWEB - Expert éminent http://www.developpez.com
le 04/01/2014 à 21:16
Citation Envoyé par Tsilefy  Voir le message
La seule optimisation qui vaille, c'est OpCache ou APC.
...Un code clair et facile à maintenir + une cache d'opcode est bien mieux que toute tentative d'optimisation par le développeur.

C'est quand même trop vite dit. On peut faire aussi un code clair mais non optimisé qui peut s'avérer catastrophique dans certains cas (par exemple la manipulation de grands tableaux) en termes d'occupation mémoire même si c'est moins visible en termes de rapidité. Et cela n'est pas sans incidence sur les performances du serveur... Je passe sur l'optimisation du schéma et des indexes des tables de bdd etc. Bref je dirais plutôt que le système de cache est le dernier étage de l'optimisation - qui effectivement donne de très bons résultats - mais cela ne permet pas pour autant de négliger les étages précédents (pas toujours)
Avatar de Tsilefy Tsilefy - Membre chevronné http://www.developpez.com
le 05/01/2014 à 3:17
Exact, mais ma remarque ne portait évidemment que sur les optimisations concernant l'écriture du code lui-même. Bien évidemment, un schema MYSQL bien pensé, un code profilé si nécessaire, un reverse proxy, etc... tout cela améliorera considérablement la performance de l'ensemble.

Ce que je veux dire, c'est qu'il faut éviter les micro-optimisations qui conduisent à des codes illisibles.

Les trucs du genre micro-framework en un tweet, comme
Code : Sélectionner tout
1
2
3
4
<? $g=$GET;$c=@$g['c']?:'Home'; 
if(!@include"c/$c.php")die('fail'); 
$m=methodexists($c,$m=@$g['m'])?$m:'index'; 
$o=new$c;$o->$m($g);
c'est formidable pour le fun et pour la beauté du geste, mais sur un code en production, j'estime que la lisibilité du code l'emporte sur tout gain que cela peut rapporter.
Avatar de imikado imikado - Rédacteur http://www.developpez.com
le 05/01/2014 à 10:28
Ca me fait penser au concours perl "juste another perl hacker" qui consiste à faire les codes les plus concis possible
Code perl : Sélectionner tout
$_='987;s/^(d+)/$1-1/e;$1?eval:print"Just another Perl hacker,"';eval;


http://en.m.wikipedia.org/wiki/Just_another_Perl_hacker
Avatar de ABCIWEB ABCIWEB - Expert éminent http://www.developpez.com
le 05/01/2014 à 17:50
Citation Envoyé par Tsilefy  Voir le message
Ce que je veux dire, c'est qu'il faut éviter les micro-optimisations qui conduisent à des codes illisibles.

Ah ok, on est tout à fait d'accord

Et l'exemple que tu donne est très concluant. Si en plus c'est pour utiliser inconsidérément l'opérateur de suppression des erreurs qu'il est recommandé de n'utiliser qu'en dernier recours, l'auteur de ce genre d'exploit perd sur tous les tableaux : lisibilité et performances.

Je crois que ce type d'attitude qui consiste à avoir un code le plus concis possible au détriment de la lisibilité relève le plus souvent de débutants qui faute d'expérience n'ont pas encore le sens des priorités.
Avatar de Shuty Shuty - Membre éprouvé http://www.developpez.com
le 31/01/2014 à 14:23
Citation Envoyé par sekaijin  Voir le message
ç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 : Sélectionner tout
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 : Sélectionner tout
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


L'exemple n'étais pas le meilleur certes, j'avais écris avant de partir en meeting. Autrement, par optimisation j'entends aussi le coté lecture du code pas forcément rapidité d’exécutions.

APC est un très bon accélérateur en effet. Il faudrait d'ailleurs que je vois comment ca fonctionne "programmement" parlant.
Avatar de Yvan L Yvan L - Nouveau membre du Club http://www.developpez.com
le 23/11/2014 à 12:56
Bonjour tout le monde,

Je vois beaucoup de mélange html et php dans les demandes d'aide. (exemple : Problème d'affichage de variable ).
É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 ?

Dans le lien ci-dessus, le premier "form" en html serait remplacé par :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
function formulaire_pour_commentaires_html_make () { 
  $html  = '<form action="avis.php" method="post" name="avis">' . "\n"; 
  $html .= '<label for="pseudo">Pseudo</label>' . "\n"; 
  $html .= '<input type="text" name="pseudo" size="106" maxlength="30"><br>' . "\n"; 
  // Et ainsi de suite 
     
 print $html; 
} 
 
//Affichage du formulaire 
formulaire_pour_commentaires_html_make ();
En ce qui concerne ma programmation :
- Je met toujours des noms de fonctions pour savoir ce que cette fonction fait rien qu'en lisant son nom, même si c'est un nom long.
- Je fais la même chose pour les variables.
- Quand c'est un array, je rajoute "_a" au bout du nom de la variable ou du nom de la fonction.
- Je rajoute des "\n" dans les fonctions d'affichage, afin que le code source de la page soit plus lisible.

D'autre part, j'utilise la méthode IRP (valable pour tous les langages) : Implicit Reference to Parameters . "Un moyen de réduire le couplage inter-modules".
Donc, gain de temps à l'exécution, et limitation des paramètres de la liste d'appel dans les fonctions.
Avatar de Spartacusply Spartacusply - Membre expert http://www.developpez.com
le 01/12/2014 à 15:48
É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 : Sélectionner tout
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.
Offres d'emploi IT
Analyste programmeur - chef de projet h/f
MULTICIBLES - Limousin - Brive-la-Gaillarde (19100)
Développeur Symfony 2 PHP
LCNetwork - Ile de France - Marseille (13000)
CTO / développeur PHP - H/F
UpSourcing - Ile de France - Paris (75000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique PHP