Hello,
On va prendre ton idée pour illustrer le probleme :
tu veux afficher des articles genre news, c'est quoi un article ? un titre, un texte, un auteur et une date au minimum. Voila tu as là un objet :
class Article{
public $titre, $texte, $auteur, $date;
}
jusque là rien de bien intéressant
maintenant tu as des contraintes sur ces variables : ta date par exemple doit ressembler à quelque chose, ton titre, dans ta BDD tu as prévu un champ varchar de 150 caractères ? l'objet va gérer cela via les méthodes d'accès aux variables (qu'on appele manipulateurs, ou setters quand on se la pète).
Pour le titre par exemple on va créer une méthode pour définir le titre, généralement appelée set+variable à affecter, soit setTitre. Exemple:
class Article{
public $titre, $texte, $auteur, $date;
public function setTitre( $titre ){
$titre = trim( $titre ); // on efface tous les caractères "blancs" inutiles et pervers
if( empty( $titre ){
// là si le titre est vide, l'objet sera invalide, on a plusieurs moyens de le traiter, pour l'instant et pour pas embrouiller le bidule, on va prendre le plus simple on retourne faux, et on laisse le script procédural gérer le bébé.
return false;
}
if( strlen( $titre ) > 150 ) return false; //Là on teste la longueur du titre, s'il est trop grand il va foirer dans la BDD, donc on retourne un faux à la procédure là encore
// ici on va considérer qu'on a effectué tous les tests indispensables on enregistre donc $titre dans l'objet
$this->titre = $titre;
return true; // ici on retourne vrai par acquis de conscience, pour signaler au script que le titre est validé
}
}
ensuite dans ta procédure tu n'as plus qu'a faire un truc du style :
$monArticle = new Article;
if( $monArticle->setTitre( ' ' ) === false ){
// tu sais ici que ton titre est invalide, tu peux donc faire tes actions en conséquence.
}
De prime abord, tu vas te dire que ca a pas changé grand chose. Tu as juste déplacé tes tests de variables dans un bidule appelé Objet.
Maintenant essaye d'imaginer comment sera ton code, si tu ne passe pas par cet objet, lorsque tu auras défini tous tes tests pour tous tes champs, et que tu noieras tout cela dans une procédure pour savoir si tu dois l'enregistrer ou pas, réafficher un formulaire, afficher des messages d'erreurs, etc.
En fait tout l'intéret de la POO (dans ce cas de figure) est de te permettre de "ranger" certaines fonctions de maniere intelligente et de rendre tes scripts beaucoup plus lisible après coup, et plus simple à coder parce qu'au moment ou tu crée ton objet, tu n'as pas à t'occuper de ce qui l'entoure, et lorsque tu t'occupe de ce qui l'entoure, tu sais que tu peux faire confiance à ton objet pour te retourner ce que tu attends de lui.
J'espere que cet exemple t'aidera un peu, ou au pire qu'il ne t'ait pas trop embrouillé
