Tours de passe-passe en PHP

Tour de passe-passe en PHP

Quelques astuces de syntaxe du langage PHP qu'on rencontre rarement.

Initialisation de constantes et de variables avec l'opérateur OR

On utilise ici une optimisation de PHP qui lorsqu'il rencontre plusieurs expressions combinées avec l'opérateur OR, arrête son évaluation lorsque une des expressions renvoie true.

Cette astuce permet d'initialiser une constante seulement lorsqu'elle n'est pas encore définie.

define('MA_CONSTANTE', 1);
echo MA_CONSTANTE . "\n"; // Affiche 1
 
// La ligne suivante n'a aucun effet puisque MA_CONSTANTE est déjà initialisée
defined('MA_CONSTANTE') || define('MA_CONSTANTE', 2); 
echo MA_CONSTANTE; // Affiche toujours 1

Vous pouvez également initialiser une variable de cette manière :

$a = 1;
isset($a) || $a = 'Ma valeur'; // Sans effet
var_dump($a); // Affiche int(1)
 
isset($b) || $b = 'Ma valeur';
var_dump($b); // Affiche string(9) "Ma valeur"

Attention cependant, le code suivant ne fonctionne pas (l'évaluation renvoie toujours un booléen).

$a = isset($a) || 'Ma valeur';
var_dump($a); // Affiche bool(true)

L'opérateur ternaire

Plus connu, c'est une version courte de if/else.

$monParametre = isset($_POST['mon_parametre']) ? $_POST['mon_parametre'] : 0;

Si le paramètre existe dans le tableau $_POST, on l'affecte à la variable $monParametre, sinon on initialise cette dernière avec la valeur 0.

Fonction avec un nombre variable d'argument

function maFunction()
{
    $args = func_get_args();
    echo implode(', ', $args);
}
 
echo maFunction() . "\n"; // N'affiche rien
echo maFunction('a', 'b') . "\n"; // Affiche a ,b
echo maFunction('a', 'b', 'c'); // Affiche a ,b, c

En fait, on définit une fonction sans préciser le détail de ses arguments, puis on récupère ces derniers à l'aide de func_get_args. C'est plus pratique et plus propre que d'utiliser un tableau comme seul argument.

La méthode find de Zend_Db_Table_Abstract utilise cette technique, ce qui permet de passer une clé primaire sur plusieurs colonnes.

Négation

Saviez vous qu'on pouvait faire ça en PHP ?

$a = 1;
echo -$a; // Affiche -1

Moi non. Jusqu'ici, je multipliais systématiquement ma variable par -1.

Opérateur d'exécution

Avec l'apostrophe inversée (`), on peut exécuter une ligne de commande.

echo `dir`; // Affiche le résultat de la commande DIR sous Windows

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account, used to display your avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].

Plus d'informations sur les options de formatage

CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.