L'élément de langage declare sert à ajouter des
directives d'exécutions dans un bloc de code. La syntaxe de
declare est similaire à la syntaxe des autres
fonctions de contrôle :
Exemple 16-29. Instruction directive <?php
declare (directive)
statement
?> |
|
L'expression directive permet de contrôler l'intervention
du bloc declare. Actuellement, une seule directive
est reconnue : la directive ticks (Voir plus bas pour plus
de détails) sur les ticks).
L'expression statement du bloc de
declare sera exécutée. Comment elle sera exécutée,
et quels effets cela aura dépend de la directive utilisée dans le bloc
directive.
La structure declare peut aussi être utilisée
dans le contexte global. Elle affecte alors tout le code qui la suit :
Exemple 16-30. Instruction directive en contexte global
<?php // Ces déclaration sont identiques.
// Vous pouvez utiliser ceci declare(ticks=1) { // script entier ici }
// ou ceci declare(ticks=1); // script entier ici ?>
|
|
Un tick est un événement qui intervient toutes les
N commandes bas niveau, exécutées par l'analyseur
dans le bloc de declare.
La valeur de N est spécifiée avec la syntaxe
ticks=N
dans le bloc de directive declare.
Un événement qui intervient à chaque tick est spécifié avec la fonction
register_tick_function(). Reportez-vous à l'exemple
ci-dessous pour plus de détails. Notez que plus d'un événement peut
intervenir par tick.
Exemple 16-31. Profiler une section de code PHP
<?php // Un fonction qui enregistre l'heure à laquelle elle est appelée function profile($dump = FALSE){ static $profile; // Retourne les horaires stockés dans le profile, et l'efface if ($dump) { $temp = $profile; unset($profile); return $temp; } $profile[] = microtime (); }
// Enregistre un gestionnaire de tick register_tick_function("profile");
// Initialise la fonction avant le bloc de déclaration profile();
// Exécute un bloc de code, et appele un tick toutes les deux secondes declare (ticks=2) { for ($x = 1; $x < 50; ++$x) { echo similar_text(md5($x), md5($x*$x)), "<br />"; } }
// Affiche les données de la variable $profile print_r(profile(TRUE)); ?>
|
|
Cet exemple profile le code PHP dans le bloc de déclaration,
et enregistre l'heure de chaque commande bas niveau. Cette
information peut être réutilisée pour débusquer les segments
de code lents. Vous pouvez implémenter d'autres méthodes, mais
les ticks sont plus rapides et plus efficaces.
Les ticks sont bien pratiques pour déboguer, implémenter un
multi-tâches simple, des entrées sorties en tâche de
fond, ou bien d'autres choses, avec PHP.
Voir aussi
register_tick_function() et
unregister_tick_function().