Introduction à la POO avec PHP - Partie 6
Par Méthylbro le samedi 19 avril 2008, 06:30 - Tutoriels - Lien permanent
Si vous avez suivis tous mes billets sur la POO avec PHP de cette semaine (voir le billet Introduction à la POO avec PHP) ; vous devez maintenant être en mesure d’écrire vos premières classes. De définir vos premiers objets. Bref ; d’entrer dans le monde de la Programmation Orienté Objet.
Aujourd’hui suite et fin de cette série de billet. Aujourd’hui ; cours pratique. Créons notre classe Stylo !
Exemple
Maintenant ; vous avez en main tous les clés pour comprendre le détail de ma classe d’exemple.
class Stylo {
static private $niveau_encre_max = 100;
static private $niveau_encre_min = 25;
private $niveau_encre;
protected $couleur_normale = '#000000';
protected $couleur_fin = '#C0C0C0';
public $statut;
private function peutEcrire() {
if (!$this->statut) {
$result = false;
} elseif ($this->niveau_encre<=0) {
$result = false;
} else {
$result = true;
}
return $result;
}
public function __construct() {
$this->statut = false;
$this->niveau_encre = self::$niveau_encre_max;
}
public function click() {
if ($this->statut) {
$this->statut = false;
} else {
$this->statut = true;
}
}
public function ecrire($texte) {
if ($this->peutEcrire()) {
echo '<p style="color:'.$this->couleur_normale.'">';
$nb_caracteres = strlen($texte);
$texte = htmlentities($texte);
$texte = str_split($texte);
$i = 0;
while($this->peutEcrire() && $i<=$nb_caracteres) {
if ($this->niveau_encre==self::$niveau_encre_min) {
$format = '<span style="color:'.$this->couleur_fin.'">%s';
} else {
$format = "%s";
}
printf($format, $texte[$i]);
$i++;
$this->niveau_encre --;
}
if ($this->niveau_encre<=self::$niveau_encre_min) {
echo "</span>";
}
echo "</p>\n";
}
}
}
$monBic = new Stylo();
$monBic->ecrire(‘Essayez d\’écrire sans enlever le capuchon…’) ;
$monBic->click() ;
$monBic->ecrire(‘Un premier paragraphe.’) ;
$monBic->ecrire(‘Un second paragraphe qui n\’iras pas jusque au bout car mon stylo va certainement manquer d’encre.’);
$monBic->click() ;Conclusion
La plupart des développeurs qui ne développent pas encore en POO expliquent souvent que ; pour qu'il leur est plus "naturel" de concevoir et de lire un code procédural.
C’est une fausse excuse. Sur un projet de taille un peu conséquente ; il sera plus facile de manipuler des objets et des entités logique. Ainsi que plus facile à écrire ; et à naviguer au sein de ces entités. Que de se retrouver au milieu d’une foule de procédures ; complexifiant le code ; et très souvent même consommant trop de ressources.
De plus ; l’exemple utilisé dans cet article démontre bien que ; grâce au concept objet ; vous pouvez intégrer absolument tous les cas que vous aurez à traiter. Et ce ; en quelques minutes.
Commentaires
Pourquoi avoir mis les attributs $couleur_normale, $couleur_fin protected et $statut public ??
Et c'est un peu l'border ya plein de if/elseif/else partout ^^.
Vraiment super tuto ! bravo
a quand une liason avec une base de donnée ?
Les variables statiques ne doivent pas être utilisés comme des variables globales. Il faut les mettre en attributs et définir un getter.
Dommage que la notion de hiérarchie n'est pas encore était introduite car cela te permettrai de faire du code plus "propre". Un stylo est un stylo qui a un niveau d'encre défini mais un stylo encre et un stylo à bille n'ont pas le même niveau d'encre pourtant ce sont des stylos. Le stylo (en general qu'il soit à bille ou à encre) à le même comportement mais spécifique à chaque type de stylo: c'est ce que l'on apelle la spécialisation.
Il faut donc définir une classe mere Stylo et des classes fillse Stylo_encre et Stylo_fille avec des comportements spécifiques. Je laisse Méthylbro faire un tuto sur ces notions car je suis une bille (petit jeu de mot ^^) en php.
Tu pourrais aussi parler des bonnes pratiques dans la programmation objet (le nom d'une classe débute par une majuscule) et introduire la notion de pattern (par exemple: demeter).
Pour rejoindre le commentaire de dig,le protected ne sert à rien; je n'ai pas entendu parler de package au cours des articles.
Le statut public beurk
on met l'attribut en private et on définit un getter et setter (si on met en public on viole l'encapsulation des données).
Pour toalk, la base de données est difficile à gérer si on a une conception objet. Il existe des patterns (dont je n'ai plus le nom en tête) pour ne pas faire n'importe quoi.
Méthylbro; bon courage pour la suite de tes articles qui ont pour but de faire découvrir au débutant la notion d'objet.
En espérant apporter des critiques constructives ...
BipBip421 devrait laisser son air condescendant et se dire que lui aussi doit être débutant quelque part.
Méthylbro a fait un super tuto, et il a osé s'exposer aux éventuels scuds qui ont rapidement été envoyés par BipBip421.
Bravo Méthylbro, ce sont des mecs comme toi qui permettent à des tas de développeur d'avoir le pied à l'étrier pour continuer à progresser.
Je tiens à te dire un très grand BRAVO, étant donné que tu as réussi à me faire convaincre que la POO peut être un excellent atout pour créer un site web (bon, là tu parles de stylo, mais c'est faisable également pour le web... framework, CMS...).
Bref, l'exemple du stylo est très bien, surtout que tu t'en es servi du début à la fin en expliquant les notions de la POO.
Il me reste maintenant plus qu'à approndir mes nouvelles connaissances avec d'autres tutos et beaucoup de pratiques !
Merci beaucoup.
Je me joins aux autres pour te feliciter pour ce tuto.
Cependant je ne pense pas que bipbip envois le moindre skud ici et bien que je suppose que la poo couvre de nombreuses notions, je trouve dommage de s'arreter en si bon chemin. Et de terminer en nous envoyant une classe pas du tout commentée dans les dents avec des protected, des selfs et static private (j'avais compris que l'interet c'etait de modifié une prop static dans un objet pour modifier automatiquement la valeur dans tous les objets mais si c'est private.. /).
Bref pour moi les 5 premieres parties sont super interessantes et je regrette amerement de ne pas en avoir quelques autres traitant des methodes get/set, de l'heritage, des patterns et du bon usage de l'encapsulation par exemple
Mais bon je trouverai surement tout ca ailleur. (dommage car je ne pense pas que ce sera aussi didactique qu'ici ): )
En tous les cas bravo pour l'accessibilité!
C'est simple et efficace , joli travail!