PROJET AUTOBLOG


Idleman

source: Idleman

⇐ retour index

Quelques petites astuces PHP

jeudi 4 juillet 2013 à 19:29

Je 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 Sourire

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");