Quelques astuces de syntaxe du langage PHP qu'on rencontre rarement.
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)
?>
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.
<?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.
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.
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
?>
Add new comment