Dans cette vidéo hors‑série, le présentateur montre comment ré‑implémenter un compteur de visites précédemment réalisé en PHP procédural, mais en utilisant la programmation orientée objet. Il crée un fichier Counter.php contenant une classe Counter avec deux attributs : le descripteur de fichier (fp) et le nombre lu dans le fichier texte Counter.txt. Le constructeur ouvre le fichier en mode lecture‑écriture, lit la valeur initiale avec fgets et l’affecte à nbr. Une méthode inc() incrémente nbr, replace le curseur du fichier au début (fseek) et réécrit la nouvelle valeur. Une méthode getter renvoie la valeur du compteur. Le présentateur montre comment instancier la classe, appeler inc() et afficher le compteur, puis corrige une petite erreur de variable. Il propose ensuite des améliorations : appeler inc() directement depuis le constructeur, éviter les affichages dans le constructeur, et surtout gérer les visites uniques avec session_start et une variable de session (visité) pour n’incrémenter qu’une fois par session. Enfin, il ajoute un destructeur qui ferme le fichier avec fclose. La vidéo se conclut par un rappel de la vidéo précédente sur la manipulation de fichiers et encourage le spectateur à la revoir pour mieux comprendre le mécanisme sous‑jacent.
Chapters
Bonjour à tous et bienvenue dans cette vidéo hors-série sur la programmation orientée objet en PHP. Aujourd'hui, nous allons essayer de mettre en pratique ce que nous avons appris jusqu'ici et nous allons créer un compteur de visites. Je rappelle que nous avons déjà fait cet exemple avant, dans la série consacrée au langage PHP procédural, en l'occurrence lors de la séance consacrée aux fichiers. Aujourd'hui, nous allons faire la même chose mais en orienté objet. Nous avons donc besoin de 2 fichiers: le fichier Counter.php qui contiendra le code que l'on va éditer et le fichier Counter.txt qui contiendra la valeur du compteur où nous avons placé la valeur 0 initialement. Alors, première opération à faire c'est la création de la classe que j'ai nommée Counter avec un C majuscule. Ensuite, on va déclarer les attributs dont on aura besoin. Figurez-vous bien que nous avons besoin d'un fichier texte, alors forcément on aura besoin de l'identifiant d'ouverture de ce fichier-là. On va donc le déclarer en tant qu'attribut de cette manière. La valeur embarquée au sein de ce fichier et que l'on va afficher au navigateur, elle aussi, elle constitue un attribut que j'ai nommé nbr. Ensuite, on va créer le constructeur qui va initialiser ces 2 attributs. Dans un premier temps, on n'aura pas besoin d'arguments. Alors pour l'attribut fp, nous allons y placer l'identifiant d'ouverture du fichier texte. Le fichier est ouvert en mode lecture-écriture parce qu'on a besoin de lire la valeur qu'il contient et aussi de la modifier. Ensuite, on va initialiser l'attribut nbr avec la valeur qui est embarquée au sein du fichier texte comme ceci. À l'aide de la fonction fgets, nous allons récupérer la ligne entière qui contient dans ce cas la valeur 0. Donc là, on vient d'initialiser les attributs. Dans le jargon PHP, on dit qu'on a hydraté l'instance, c'est-à-dire qu'on a initialisé les attributs de l'objet qui sera l'instance de la classe Counter. La prochaine opération maintenant, c'est que l'on va créer une méthode qui va incrémenter la valeur du compteur et qui va la placer dans le fichier texte. On va appeler cette méthode inc. Alors on va incrémenter la valeur nbr et ensuite on va placer celle-ci dans le fichier texte, mais avant il faut déplacer le curseur du fichier au début de celui-ci. Voilà, c'est-à-dire la position 0, et maintenant je peux écraser l'ancienne valeur en la remplaçant par la nouvelle valeur de nbr. Alors la méthode inc a permis d'incrémenter la valeur du compteur et elle a enregistré cette nouvelle valeur dans le fichier compteur.txt. Maintenant on va déclarer une autre méthode qui va nous retourner la valeur du compteur afin de l'afficher. Alors jusqu'ici nous avons fait les opérations de base à l'aide de la classe Compteur. Maintenant on va créer une instance de classe. Puis on va appeler la méthode inc qui va incrémenter le compteur et enregistrer sa nouvelle valeur. Et enfin on va afficher la valeur du compteur. On exécute maintenant pour voir le résultat. J'ai dû commettre une erreur à la ligne 11. Ah oui, ça va rien. Fallait mettre FP. Voilà, comme ça. Alors réexécutons. Trois, quatre, etc. Donc maintenant, si on consulte le fichier compteur.txt, on va voir qu'il contient la nouvelle valeur. On peut améliorer ce programme un petit peu parce que, comme vous l'avez constaté, afin de faire le traitement, mis à part le code de la classe, j'ai déclaré trois instructions et c'est un peu trop pour un traitement pareil. Donc ce que nous allons faire, c'est quoi? C'est que déjà le constructeur, c'est lui qui va se charger d'appeler automatiquement la méthode inc. Donc ce qu'on va mettre ici, c'est directement this->inc. Alors pas la peine de déclarer cette ligne parce que ça sera fait automatiquement. On peut aussi afficher le compteur directement ici. On mettra par exemple echo affiché comme ça. Voilà, donc maintenant si je commente cette ligne et que j'exécute, Ça fonctionne de la même manière, mais il est préférable que le constructeur n'affiche rien. Donc on va éliminer cette instruction et on va la remettre à sa place. Le traitement maintenant est bon. Il y a encore un truc, c'est que vous avez constaté qu'à chaque fois que j'actualise ma page, le compteur s'incrémente automatiquement. Alors ce qu'il faut faire, c'est comptabiliser les visites uniques. Alors on va recourir au session et comme d'habitude, on va mettre session_start ici. Et là, le traitement à mettre dans la méthode inc est conditionné par une variable de session que l'on va créer, exactement comme on a fait dans la vidéo consacrée aux fichiers. C'est-à-dire que l'on va évaluer la variable de session déjà visitée, si elle est différente de 8, c'est uniquement à ce moment-là que l'on va faire ce traitement. N'oubliez pas de mettre l'arobase afin d'échapper les erreurs de notifications éventuelles au début. Et là, on va affecter la valeur 8 à la variable de session. Exécutons maintenant pour voir le résultat. Voilà, maintenant c'est bloqué, ça s'incrémente plus. Quand j'efface l'historique, voilà, maintenant ça s'incrémente une fois, encore une fois, et voilà. Il reste maintenant une dernière chose, c'est le destructeur. On va le déclarer ici. Et comme vous l'avez certainement deviné, il va se charger de fermer le fichier déjà ouvert. On mettra donc ici fclose desfp comme ceci. Exécutons maintenant pour voir. Donc le traitement n'a pas changé. On va encore effacer l'historique. Et voilà, maintenant mon compteur fonctionne bien. Bien entendu, je n'ai pas trop expliqué la logique parce qu'on a déjà fait cet exercice avant, alors je vous conseille vivement de revoir la vidéo des fichiers dans la série précédente du PHP afin de mieux comprendre le principe de compteur de visites uniques. Merci pour votre attention et à la vidéo prochaine.