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 :
declare (directive)
commandes
L'expression directive permet de contrôler l'intervention du bloc declare. Actuellement, seulement deux directives sont reconnues : la directive ticks (Voir plus bas pour plus de détails sur les ticks) et la directive d'encodage encoding (Voir plus bas pour plus de détails sur la directive encoding).
Note: La directive encoding a été ajoutée en PHP 5.3.0.
L'expression commandes 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 (même si le fichier avec declare a été inclus après, ça n'affecte pas le fichier parent).
<?php
// Ces déclaration sont identiques.
// Vous pouvez utiliser ceci
declare(ticks=1) {
// script entier ici
}
// ou ceci
declare(ticks=1);
// script entier ici
?>
A partir de PHP 5.3.0, les ticks sont dépréciés et seront supprimés en PHP 6.0.0.
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 #1 Profiler une section de code PHP
<?php
// Une 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, pour implémenter un système multi-tâches simple, pour gérer 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().
L'encodage d'un script peut être spécifié par script en utilisant la directive encoding.
Exemple #2 Déclaration d'un encodage pour un script
<?php
declare(encoding='ISO-8859-1');
// le code
?>
Combinée avec les espaces de nommage, la seule syntaxe valable pour declare est declare(encoding='...'); où ... est la valeur de l'encodage. declare(encoding='...') {} soulèvera une erreur d'interprétation dans le cas des espaces de nommage.
La valeur d'encodage est ignorée en PHP 5.3 à moins que PHP soit compilé avec --enable-zend-multibyte. En PHP 6.0, la directive encoding sera utilisée pour dire au scanner dans quel encodage le fichier a été créé. Les valeurs valables sont des noms d'encodage tels que UTF-8.