Une dizaine de trucs et astuces en PHP, le 5ème va vous étonner !
Petit florilège de trucs et astuces avec PHP ! Des fonctionnalités du langage qu’on retrouve rarement dans les tutoriels classiques et qui ont parfois leur utilité quand on code. Cet article évoluera au cours du temps, on viendra rajouter des sections au fur et à mesure de nos découvertes et expérimentations !
Sommaire :
On peut définir une seule valeur pour plusieurs variables de cette façon :
$variable1 = $variable2 = $variable3 = "Même valeur";
Par exemple, quand je cherche à me connecter à la base de données de Tainix, le username et le nom de la base sont identiques, je fais directement :
$database = $username = 'tainix35';
$password = 'g234ier765iuerX';
Héhé t’as cru que c’était les vrais identifiants ?!
Lorsqu’on utilise une fonction qui retourne en tableau, cela peut permettre de créer plusieurs variables d’un coup. Par exemple quand on utilise un explode :
$codeCarteBancaireTainix = '2853 2397 1349 1234';
[$partie1, $partie2, $partie3, $partie4] = explode(' ', $codeCarteBancaireTainix);
// $partie1 contient '2853'
// $partie2 contient '2397'
// etc.
Heureusement que je te donne pas le code de sécurité, sinon tu irais faire des achats 😉 (778)
Tu te souviens du tout premier exercice d’algorithmique ? Echanger la valeur de 2 variables ?
L’occasion de créer une troisième variable pour mémoriser une valeur avant qu’elle ne soit écrasée :
$var1 = 'A';
$var2 = 'B';
// Nouvelle variable
$var3 = $var1;
$var1 = $var2;
$var2 = $var3;
Et bien, ça peut se faire en 1 ligne :
[$var2, $var1] = [$var1, $var2];
Un foreach sert à parcourir un tableau. On voit parfois dans du code la vérification que ce tableau n’est pas vide avant de réaliser le foreach :
if (! empty($tableau)) {
foreach ($tableau as $valeur) {
// ...
}
}
Ca ne sert à rien ! Le code suivant ne crée aucune erreur, et ne pose aucun problème de performance :
$tableau = [];
foreach ($tableau as $valeur) {
// ...
}
Un peu comme le point précédent, la fonction unset permet de détruire une variable ou l’élément d’un tableau. Et il n’est pas nécessaire de vérifier que la variable existe ou que la clé du tableau existe :
if (isset($varQuiExistePeutEtre)) {
unset($varQuiExistePeutEtre);
}
$tableau = ['cle' => 1];
if (array_key_exists('autre_cle', $tableau)) {
unset($tableau['autre_cle']);
}
Encore une fois, ça ne sert à rien ! Le code suivant ne crée aucune erreur, et ne pose aucun problème de performance :
unset($varQuiExistePeutEtre);
$tableau = ['cle' => 1];
unset($tableau['autre_cle']);
Quoi ? Mais l’incrémentation c’est pour les nombres !
Et bien en PHP, on peut faire ça :
$var = 'a';
$var++;
echo $var; // Affiche "b"
// Autres exemples :
// 'z' => 'aa'
// 'aab' => 'aac'
// 'bonjour' => 'bonjous'
// 'A' => 'B'
Ok c’est rigolo, mais à quoi ça sert ?
array_colum est une fonction qui permet de récupérer les valeurs d’une colonne d’un tableau multidimensionnel. Exemple :
$devs = [
['prenom' => 'Marie', 'langage' => 'PHP'],
['prenom' => 'John', 'langage' => 'Javascript'],
['prenom' => 'Said', 'langage' => 'Python']
];
$langages = array_column($devs, 'langage');
// ['PHP', 'Javascript', 'Python']
Maintenant si chaque dev est l’instance d’une classe Dev et qu’on souhaite récupérer les langages, et bien array_column continue de fonctionner !
class Dev
{
public function __construct(
public string $prenom,
public string $langage
) {}
}
$devs = [
new Dev('Marie', 'PHP'),
new Dev('John', 'Javascript'),
new Dev('Said', 'Python'),
];
$langages = array_column($devs, 'langage');
// ['PHP', 'Javascript', 'Python']
Il suffit de passer en argument le nom de la propriété.
On peut avoir besoin de créer une chaine aléatoire pour plein de raisons :
Si on peut s’amuser à parcourir aléatoirement un alphabet ou autre combinaison de caractères, on peut aussi utiliser cette syntaxe.
// Clé aléatoire de 50 caractères
$token = bin2hex(random_bytes(25));
Comment ça fonctionne ?
Attention, même si une fonction aléatoire est utilisée, dans ton code, il peut être important de contrôler l’unicité du résultat obtenu. Si par exemple les tokens sont enregistrés en base de données pour des opérations uniques (récupération de mot de passe, identifiant d’un contenu, etc.)
Normalement, si on utilise la classe Datetime ou une librairie comme Carbon, on n’a pas besoin de cette astuce. Mais dans de vieilles codebase, cela peut être utile (c’est dans les vieilles marmites qu’on fait les meilleurs algos TMTC).
$date = '2023-06-02';
// Comment la passer facilement en '02/06/2023' ?
// Avec des substr et de la concaténation ?
// Plutot avec strtotime :
$date = date('d/m/Y', strtotime($date));
Comment ça fonctionne ?
PHP propose des constantes « magiques » prédéfinies. « magiques » parce qu’elles vont retourner une valeur spécifique à leur contexte d’utilisation.
Ce sont des constantes qu’on retrouve souvent quand on se plonge dans les codebase des frameworks par exemple pour pouvoir effectuer des traitements de façon dynamique.
Quelques exemples :
La liste complète dans la documentation officielle.
Pour les fichiers qui ne contiennent que du PHP (une classe par exemple), il ne faut pas finir le fichier avec ?>. Le risque étant d’inclure une ou plusieurs lignes qui seraient en dehors des balises PHP, ce qui peut engendrer des erreurs. Ces erreurs sont en plus très compliquées à identifier car elles viennent de lignes vides…
Donc :
<?php
// Je commence mon fichier
class MaSuperClasse
{
// ...
// ...
}
// Le code est fini, surtout pas de balise PHP fermante
Comme dit au début de l’article, on va essayer de le compléter au fil du temps, n’hésite pas à repasser 😉
Autres contenus à découvrir
Corrigés, challenges, actualités, veille technique... aucun spam.