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.

<?php
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 :

<?php
$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).

<?php
$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.

<?php
$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

<?php
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 ?

<?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.

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

Etiquettes:

Add new comment