Quelques petites astuces PHP
jeudi 4 juillet 2013 à 19:29Je me suis rendu compte l’autre jour qu’il y avait foule de petites techniques PHP que j’utilisais au quotidien pour me simplifier la vie et le code, et que la plupart ne m’avait jamais été apprise à l’école.
Il ne s’agit pas forcement d’exclusivités, ni de meilleures façons de coder mais si vous pouvez en trouver une ou deux utiles alors ce post n’aura pas servi à rien
N’hésitez pas à partager vos petites astuces dans les commentaires, je les placerai ici (si je les trouve justifiées évidemment)
Saviez-vous que, pour lire les fichiers d’un répertoire, vous pouviez utiliser directement la fonction scandir au lieu de opendir+readdir ? Scandir permet de plus un tri alphabétique ascendant ou descendant
ex :
var_dump(scandir('mon/repertoire/'));
résultat :
Array ( [0] => . [1] => .. [2] => bar.php [3] => foo.txt [4] => somedir )
Saviez-vous que vous pouviez récupérer le contenu d’un explode directement dans des variables avec la fonction list() ?
ex :
list($age,$prenom,$pseudo) = explode('|',25|valentin|idleman');
Saviez-vous que vous pouviez récupérer et sécuriser toutes vos variables POST et GET en une seule ligne dans un seul tableau de variables?
ex :
$_ = array_map('htmlentities',array_merge($_POST,$_GET));
Saviez-vous que vous pouviez utiliser la fonction file_get_contents au lieu de fopen+fread, fgets etc.. pour récupérer directement le contenu d’un fichier ?
nb : La fonction file() fait la même chose en vous retournant un tableau de lignes
ex :
$donnees_fichiers = file_get_contents('fichier.ext');
Ajout de Timo : La fonction file_put_contents permet quand à elle d’écrire simplement dans un fichier
file_put_contents('mon.fichier.txt','hello world');
Saviez-vous que pour les conditions simples vous pouviez utiliser les conditions ternaires au lieu d’un if/else?
ex:
$majeur = ($age>=18?true:false);
au lieu de
if($age>=18){ $majeur =true; }else{ $majeur =false; }
Ajout de William P : vous pouvez également faire directement:
$majeur = $age >= 18 ;
Ajout de Anon il existe aussi l’opérateur Elvis
foo = foo ?: bar;
Pourquoi Elvis ? => http://i.stack.imgur.com/hQlrp.png
Ajout de Walane : les parenthèses peuvent être placées uniquement sur la condition
($age >= 18) ? true : false;
Saviez vous que vous pouviez créer des variables dynamiques avec la notation $$ ?
ex :
$nomVariable = "idleman"; $$nomVariable = "is so lazy…"; echo $idleman //résultat : "is so lazy…";
Saviez vous que la fonction var_dump() était terriblement puissante avec le module xdebug activé?
Saviez vous que vous pouviez inclure automatiquement un fichier de classe simplement en l’instanciant ?
ex :
function __autoload($class_name) { require_once $class_name . '.php'; } $myUser = new User();
résultat : l’instruction require_once(‘User.php’); est implicitement incluse à votre code
Saviez-vous que vous pouviez faire appel à la méthode magique __call pour s’exécuter lorsqu’une fonction inconnue est située dans votre classe ?
ex :
__call($method,$args){ echo ‘j’ai le vague souvenir que ma méthode’.$method.’ s’est faite la malle…essaye encore (signé : ta classe)’; } fonction_bidon(‘coucou’);
Saviez-vous que vous pouviez utiliser la fonction glob() pour rechercher des types de chemins de fichier?
ex :
foreach (glob("/*/*.txt") as $filename) { echo "$filename \n"; }
résultat : affichera tous les fichiers textes situés 2 répertoires en aval du fichier PHP.
Saviez-vous que echo ‘hello world’ bouffera moins de perf que echo “hello world” ?
En effet les ” interprètent les variables contenues dans la chaine quand ‘ se contente d’afficher votre texte tel quel, ce qui économise quelques perfs.
Saviez vous que vous pouviez écrire echo ‘hello’.'world’ ou echo ‘hello’,'world’ pour un même résultat?
Ajout de Nasty Shade : utiliser la virgule apporte un gain de rapidité exécution
Ajout de Thierry : Il serait bon de préciser que cette syntaxe ne fonctionne que pour echo. Echo accepte un nombre infini de paramètres et elle les affiche tous dans l’ordre où ils sont passés. De plus, echo n’étant pas véritablement une fonction mais une structure de langage, les parenthèses sont optionnelles
Saviez vous que vous pouviez utiliser les fonctions gzinflate, gzdeflate pour compresser les données que vous envoyez ou stockez ?
Saviez vous que, dans les boucles “for” vous pouviez utiliser l’expression : i%2==0 pour les délimiteur et les alternances de couleurs?
Ex :
echo '<table>'; for($i=0;$i<10;$i++){ echo '<tr style="background-color:'.($i%2==0?'lime':'blue').'"><td>Hello</td></tr>'’; } echo '</table>';
Saviez vous que la fonction empty($var) retournera FALSE si $var existe et est non-vide, et dont la valeur n’est pas zéro?
if(empty($string))
peut donc être utilisé en lieu de place de
if($string!='' && $string!=null)
Ajout de Elo : Vous pouvez automatiquement vous mailer toutes les erreurs de votre script en temps réel avec l’expression :
set_error_handler(‘gestionErreur’); function gestionErreur( $errno, $errstr, $errfile, $errline, $errcontext) { //Fonction mail ici }
Ajout de Kevin : vous pouvez vous simplifier la vie en utilisant UNE seule instruction pour stocker du contenu sous forme compressée :
file_put_contents("compress.zlib://$filename", $content);
Ensuite, pour lire ce fichier compressé, UNE instruction également :
$content = file_get_contents("compress.zlib://$filename");