Astuces PHP

A heure tardive post orienté informatique. Aujourd’hui je vais vous présenter quelques astuces (tips en anglais) de langage permettant de gagner de la place, de ne pas rallonger inutilement le code, d’éviter des erreurs basiques… La liste n’est évidemment pas exhaustive mais cela pourra toujours vous aider de les connaître. Ces astuces ne s’appliquent d’ailleurs pas uniquement au PHP.

Bien utiliser les expressions booléennes

Que l’informaticien, développeur… qui n’a pas eu un jour à abuser des if/elseif/else lève le doigt. Il est nécessaire d’optimiser ces codes pour éviter qu’ils prennent trois kilomètres de long.

/*Boolean Expressions optimization*/
if ($a == true) {
    if ($a == true) {
        print "coucou";
    }
    else if($b == true) {
        print "coucou";
    }
}

Le code ci-dessus devrait être le suivant.

/*Boolean Expressions optimization*/
if ($a && ($b || $c)) {
    print "coucou";
}

Utiliser for à la place de while

/*Use for instead of while*/
$i = 0;
while($i < 18) {
    /*SOMETHING TODO*/
    $i++;
}
/*Shorter*/
for($i = 0; $i < 18; $i++) {
    /*SOMETHING TODO*/
}

Utiliser la récursivité

La récursivité n’est pas toujours bien comprise ni utilisée. Une mauvaise utilisation amène très vite à des programmes qui tournent en boucle dans le vide. Le principe de la récursivité est d’effectuer le même traitement sur un élément. Ci-dessous se trouve la célèbre suite de Fibonaci

/*Write recursively*/
function fibonacci($n) {
    $f1 = 1;
    $f2 = 0;
    $total = 0;
    if( $n == 0 || $n == 1)
        return $n;
    for($i = 2; $i <= $n; $i++) {
        $fib = $f1 + $f2;
        $f2 = $f1;
        $f1 = $fib;
    }
    return $fib;
}
/*Shorter*/
function fibonacci($n) {
    if ($n <= 2) return 1;
    else return fibonacci($n-1) + fibonacci($n-2);
}

L’opérateur ternaire

Je parlais plus haut de réduction du nombre de lignes de code lors de l’utilisation des if. Il est possible de réduire encore plus avec l’opérateur ternaire. Celui permet d’écrire un if/else sur un seule et unique ligne.

/*Ternary Operator*/
if ($iCompteur > 550)
    $bBool = true;
else
    $bBool = false;
/*Shorter*/
$bBool = $iCompteur > 550 ? true : false;
/*Even shorter*/
$bBool = $iCompteur > 550;

Combinaison arithmétique et opérateurs

Il s’agit sans doute de l’astuce la plus connue et utilisée. Elle permet d’identifier tout de suite ce qui est effectué.

/*Combination Arithmetic and Assignment Operators*/
$iCompteur = $iCompteur + 1000;
/*Shorter*/
$iCompteur += 1000;

Il en existe d’ailleurs un certain nombre qu’il faut connaître.

/*Combination Arithmetic and Assignment Operators*/
+= Addition
-= Soustraction
/= Division
*= Multiplication
%= Modulo
.= Concatènation
++ Incrémentation de 1
-- Diminution de 1
|= Opérateur logique ou
&= Opérateur logique et
^= Opérateur logique ou exclusif

Sens d’écriture du if

Entre le test et l’assignation à une variable, il n’existe dans la plupart des langages qu’un caractère de différence. Il est très facile de l’oublier et ainsi de générer une assignation alors qu’on voulait écrire une expression booléenne.

/*Test*/
if ($a == 1) echo "coucou";
/*Setting the variable $a to 1*/
if ($a = 1) echo "coucou";
/*Could be written this way to avoid the mistake */
if (1 == $a) echo "coucou";
/*The following code would generate a fatal error you would detect*/
if (1 = $a) echo "coucou";
Partager et découvrir : Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Wikio FR
  • Facebook
  • MySpace
  • TwitThis
  1. Un article très intéressant, pour moi qui fait du PHP en amateur, et qui attaque le C/C++ dans mon boulot…

    Je connaissais déjà les 3 premières astuces.

    Je connaissais aussi la 4eme, mais je n’aime pas l’utiliser : quand on a pas l’habitude, on n’y voit pas un « if » et moi, ça me perturbe… Idem pour les opérateurs « raccourcis », en fait.

    Ta dernière astuce est très intéressante, effectivement !

  2. Les opérateurs raccourcis ont le mérite d’améliorer la compréhension du code. Elle est plus rapide car tu sais tout de suite que l’opération se fait sur une variable et n’en inclut pas d’autres…

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>