Meilleur pratique du PHP – Episode 2

Print_r()

Vous ne vous êtes jamais dit qu’écrire :

<?php
echo "<pre>";
print_r($array());
echo "&lt;/pre>"; // remplacez le &lt; par <
?>

était un peu long et fastidieux pour afficher le contenu d’un array? Si c’est le cas, j’ai la solution, pour les autres, ça pourra quand même vous servir plus tard.

On vous a surement dit qu’il fallait utiliser print_r() pour afficher le contenu d’un array. Mais on ne vous a pas dévoilé tous les secrets de cette fonction. En effet, en regardant de plus près dans la documentation, on peut voir que cette fonction possède un paramètre facultatif qui permet d’indiquer à la fonction que l’on veut (ou que l’on ne veut pas) qu’elle revoie la chaine de caractère au lieu de l’afficher directement.
Il faut donc faire comme ceci pour lui indiquer :

<?php
print_r($array, true);
?>

Et par extension, si on veut afficher le contenu d’un array en une seule ligne :

<?php
echo '<pre>'.print_r($array, true).'&lt;/pre>'; // remplacez le &lt; par <
?>

Ce code fera exactement la même chose que le code présenté au début de ce paragraphe.

List()

Allons-y pour une “fonction” (plutôt un élément du langage, comme while ou echo) qui va permettre de stocker le contenu d’un array dans plusieurs variables.
Comme un exemple vaut mieux d’un paragraphe d’explication :

<?php
$array = array('foo', 'bar');
list($var1, $var2) = $array;
echo '$var1 = '.$var1; // affiche $var1 = foo
echo '$var2 = '.$var2; // affiche $var2 = bar
?>

Vous voyez donc que le premier élément de $array est affecté au premier argument de list(), le deuxième élément de $array est affecté au deuxième argument de list(), etc…
Si $array n’est pas un array, rien ne sera affecté, les variables resterons vides et cela ne génèrera pas d’erreurs. Si il y a trop d’arguments dans list() les variables en trop seront créées, mais resterons vides, cela ne créer pas non plus d’erreur.
Exemples :

<?php
list($a, $b, $c) = 'truc'; // $a, $b et $c seront vides
list($a, $b, $c) = array(1, 2); // $a=1, $b=2 et $c est vide
list($a, $b) = array(1, 2, 3, 4); // $a=1, $b=2 et les autres valeurs de l'array ne servent à rien
?>

C’est bien beau tout ça, mais ça va nous servir à quoi concrètement?

J’y viens! En fait, il y a deux moments où ça peut être pratique :
Premier cas où list() est utile : pour affecter $a à $b et $b à $a, sans list, vous êtes obligé d’utiliser une variable temporaire :

<?php
$a = 'foo';
$b = 'bar';
 
// sans list() :
$tmp = $a;
$a = $b;
$b = $tmp;
 
// avec list() :
list($a, $b) = array($b, $a);
?>

D’un coup, ça réduit le code, non?

Deuxième cas où list() est utile : si on veut renvoyer plusieurs éléments avec une fonction. Assez souvent, on voit des codes comme ceci :

<?php
function infoNombre($nombre)
{
   $carre = $nombre*$nombre;
   $racine = sqrt($nombre);
   $valeurAbsolue = abs($nombre);
   return array('carre'=>$carre, 'racine'=>$racine, 'valeurAbsolue'=>$valeurAbsolue);
}
$array = infoNombre($_POST['nombre']);
$carre = $array['carre'];
$racine = $array['racine'];
$valeurAbsolue = $array['valeurAbsolue'];
?>

Alors que l’on peut le réduire comme ceci :

<?php
function infoNombre($nombre)
{
   $carre = $nombre*$nombre;
   $racine = sqrt($nombre);
   $valeurAbsolue = abs($nombre);
   return array($carre, $racine, $valeurAbsolue);
}
list($carre, $racine, $valeurAbsolue) = infoNombre($_POST['nombre']);
?>

Un commentaire

Poster un commentaire

Subscribe without commenting