Les arrays en PHP sont pratiques, mais souvent imprévisibles. Découvrez comment les POPOs (Plain Old PHP Objects) peuvent rendre votre code plus lisible, typé et maintenable.
Les arrays, c’est bien pratique. On peut y ranger toutes les données qu’on veut, avec ou sans clés, et ça reste une structure incontournable. Mais parfois, cette flexibilité peut devenir un vrai casse-tête : difficile de savoir à quoi s’attendre, et bonjour les erreurs de frappe sur les clés. Heureusement, il existe une solution simple pour y voir plus clair : les POPOs !
Prenons un exemple concret.
Avant, je passais mes données à un objet sous forme d’array :
class MonObjet
{
public function bidouille(array $user)
{
// toutes ces données dans seulement 4 caractères... l'audace, la fougue.
if ($user["element_super_important_big"] === 93) {
win();
}
}
}
Mais ça, c’était avant. Aujourd’hui, je préfère nommer correctement mes variables et, surtout, utiliser les POPOs pour trimbaler mes données.
Un POPO, c’est quoi ? C’est tout simplement un objet PHP qui définit une structure de données claire et prévisible. Inspiré du concept de POJO (Plain Old Java Object) en Java, le POPO permet d’organiser vos données comme un array… mais en mieux !
Avec un POPO, vous bénéficiez de l’autocomplétion, d’une structure de données bien définie et d’une lisibilité accrue. Et tout cela, sans sacrifier la simplicité.
Pour construire un POPO, rien de plus simple. On définit une classe qui représente notre structure de données, avec des attributs publics ou des getters. Voici un exemple :
namespace Rachids\Popo;
class User
{
public function __construct(
public readonly string $name,
public readonly string $email,
public readonly int $chiffrePrefereEntre_1_et_100,
) {}
}
Avec un tel objet, vous savez exactement ce que contiennent vos données et vous profitez d’une immuabilité grâce au mot-clé readonly
.
Reprenons notre méthode bidouille
:
namespace Rachids\System;
use Rachids\Popo\User;
class MonObjet
{
public function bidouille(User $userPOPO)
{
if ($userPOPO->chiffrePrefereEntre_1_et_100 === 93) {
win();
}
}
}
Là, c’est tout de suite plus clair, non ?
Les POPOs peuvent aussi contenir de la logique. Par exemple, on peut ajouter une méthode statique pour créer un objet depuis une requête Laravel :
namespace Rachids\LesPOPOS;
use Illuminate\Support\Facades\Request;
class User
{
public function __construct(
public readonly string $name,
public readonly string $email,
public readonly int $chiffrePrefereEntre_1_et_100,
) {}
/**
* Créer un POPO depuis une requête Laravel.
*/
public static function makeFromRequest(Request $request): self
{
return new self(
name: $request->get('name'),
email: $request->get('email'),
chiffrePrefereEntre_1_et_100: $request->get('chiffre', 42)
);
}
/**
* Est-ce que l'utilisateur aime le 93 ?
*/
public function isNeufTrois(): bool
{
return $this->chiffrePrefereEntre_1_et_100 === 93;
}
}
Avec cette classe, notre if
devient encore plus lisible :
if ($userPOPO->isNeufTrois()) {
win();
}
Les POPOs sont un outil puissant pour améliorer la qualité de vos applications PHP. Essayez-les, et vous ne reviendrez plus jamais aux arrays !