II. Première approche▲
II-A. Les fonctions de Bufferisation de sortie▲
Le buffer c'est ce flux d'informations que votre serveur envoie vers le navigateur du client.
Lorsque vous vous écrivez :
echo '
Hello World!
'
;
vous ajoutez au buffer la chaine de caractères « Hello World! ».
Il est possible, dans une certaine mesure, de contrôler ce buffer. Cela peut être très pratique, notamment lors de l'utilisation de la fonction header() au milieu de notre code.
En effet, en vidant le buffer de la page avant d'effectuer le header(), vous pourrez utiliser cette fonction n'importe où dans votre code.
//
// exemple de redirection sans la gestion du buffer
//
// écrire dans notre page
echo '
ceci est du texte
'
;
//
// rediriger le visiteur
header("
Location: http://www.developpez.com
"
);
// => ERREUR
la redirection ne marche pas : il y a une alerte parce que des entêtes ont déjà été envoyés au navigateur.
Maintenant, utilisons les fonctions de gestion de la Bufferisation de sortie :
//
// exemple de redirection AVEC la gestion du buffer
//
// démarrer la temporisation
ob_start();
//
// écrire dans notre page
echo '
ceci est du texte
'
;
//
// vider le contenu du buffer
ob_clean();
//
// rediriger le visiteur
header("
Location: http://www.developpez.com
"
);
// => tout est OK
Cette fois, aucune erreur : nous avons vidé le buffer avant d'effectuer notre redirection.
La gestion de la Bufferisation s'effectue avec la fonction ob_start(). Cette fonction temporise l'envoi du flux (du buffer), de telle sorte qu'on puisse envoyer le buffer d'un seul coup, soit à la fin de notre code (ce qui se fait automatiquement), soit à un moment de notre choix.
Voici la liste des principales fonctions de gestion de la Bufferisation de sortie :
Fonction |
Description |
---|---|
ob_start() |
Démarre la temporisation du flux. À placer en début de code |
ob_get_contents() |
Retourne le buffer (temporisé) |
ob_clean() |
Vider le buffer. Utile, par exemple, pour utiliser la fonction header() |
ob_get_clean() |
Retourne le buffer et le vide. Équivalent de ob_get_contents() + ob_clean() |
ob_flush() |
Envoie le buffer (temporisé) |
Examinons maintenant ce qu'il est possible de faire grâce à ces fonctions, en développant une petite Classe de génération de scripts JavaScript.
II-B. Exemple : remplacer du texte▲
Imaginons que nous voulions, pour une raison ou une autre, remplacer toutes les occurrences de « toto » sur la page par « titi » :
//
// démarrer la temporisation
ob_start();
...
//
// Notre page contient le mot "toto"
echo '
Hello toto !
'
;
//
// récupérer le tampon de sortie et le vider
$content
=
ob_get_clean();
//
// réécrire le contenu de la page
$content
=
str_replace('
toto
'
,
'
titi
'
,
$content
);
echo $content
;
La page affichera :
Hello titi !
Nous avons capturé le buffer et l'avons modifié selon nos souhaits. Cela peut être très pratique, par exemple pour ajouter des balises alt et title à toutes les images de la page qui n'en ont pas…
II-C. Comment procéder ?▲
Pour pouvoir réutiliser facilement notre code, nous allons développer une classe. Notre premier souci doit être la facilité d'utilisation de cette classe, le second sa compatibilité avec à peu près n'importe quel script ou framework JavaScript.
La solution que je vous propose de tester est une solution parmi d'autres, et il est possible d'en imaginer de plus efficaces ou plus rapides. Toutefois, notre solution nous permettra de comprendre comment fonctionnent les fonctions de Gestion de buffer de PHP.
Nous allons donc créer une classe générique qui va donner les méthodes principales de toutes les classes filles qui vont hériter d'elle. Cette Classe, jamais instanciée, sera donc abstraite.
Par ailleurs, il est possible d'imaginer qu'on utilise plusieurs fois le même script sur la page (dans le cas, par exemple, de miniatures pour un album photo). Les propriétés et attributs de cette Classe (identifiants des objets HTML, répertoires…) devront donc être partagés par l'ensemble des instances de cette Classe, c'est pourquoi nos méthodes et attributs seront Static.
II-D. Quoi faire et comment ?▲
Quelles sont les méthodes principales que nous aimerions avoir pour nous simplifier la gestion des scripts JavaScript dans nos fichiers PHP ?
Nous pouvons déterminer quatre points, communs à tous (ou presque) les scripts JavaScript, qui sont indispensables pour la génération de code JavaScript depuis le PHP :
- savoir si le script est déjà initialisé dans la page ;
- gérer les variables des scripts (identifiants des objets HTML, configuration, etc.) ;
- ajouter dans la balise head de notre code un appel de fichier (.css ou .js) à n'importe quel moment ;
- ajouter dans la balise head un script JavaScript.
Nous allons donc voir comment proposer une solution pour chacun d'entre eux.