(PHP 4, PHP 5, PHP 7)
El constructor declare es usado para fijar directivas de ejecución para un bloque de código. La sintaxis de declare es similar a la sintaxis de otros constructores de control de flujo:
declare (directive) statement
La sección directive permite que el comportamiento de declare sea configurado. Actualmente, solamente están reconocidas tres directivas: ticks (véase abajo para más información sobre la directiva ticks), encoding (véase abajo para más información sobre la directiva encoding) y strict_types (para más infomación, véase la sección strict de la página de Argumentos de funciones)
Versión | Descripción |
---|---|
5.3.0 | Se añadió la directiva encoding |
7.0.0 | Se añadió la directiva strict_types |
Ya que las directivas se manejan mientras el fichero está siendo compilado, solamente se pueden proporcionar literales como valores de directivas. No se pueden emplear variables ni constantes. Como ejemplo:
<?php
// Esto es válido:
declare(ticks=1);
// Esto no es válido:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>
La parte statement del bloque declare será ejecutada - como se ejecuta y que efectos secundarios ocurran durante la ejecución puede depender de la directiva fijada en el bloque directive.
El constructor declare también se puede utilizar en el alcance global, afectando a todo el código que le sigue (sin embargo, si el archivo con el declare fue incluido entonces no afectará al archivo padre).
<?php
// estos son lo mismo:
// se puede usar ésto:
declare(ticks=1) {
// script entero aquí
}
// o se puede usar ésto:
declare(ticks=1);
// script entero aquí
?>
Un tick es un evento que ocurre para cada
sentencia tickable N de bajo nivel ejecutada
por el intérprete dentro del bloque declare.
El valor para N se especifica
usando ticks=N
dentro del bloque de declare
de la sección directive.
No todas las sentencias son tickable. Por lo general, expresiones de condición y expresiones de argumento no son tickables.
Los eventos que ocurren en cada tick se especifican mediante la register_tick_function(). Ver el ejemplo abajo para más detalles. Tener en cuenta que más de un evento puede ocurrir por cada tick.
Ejemplo #1 Ejemplo de uso del tick
<?php
declare(ticks=1);
// Una función llamada en cada evento tick
function tick_handler()
{
echo "tick_handler() llamado\n";
}
register_tick_function('tick_handler');
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
?>
Ejemplo #2 Ejemplo de uso de ticks
<?php
function tick_handler()
{
echo "tick_handler() llamado\n";
}
$a = 1;
tick_handler();
if ($a > 0) {
$a += 2;
tick_handler();
print($a);
tick_handler();
}
tick_handler();
?>
Véase también register_tick_function() y unregister_tick_function().
Una codificación de script puede ser especificada para cada script usando la directiva encoding.
Ejemplo #3 Declarando un encoding para el script
<?php
declare(encoding='ISO-8859-1');
// código aquí
?>
Cuando se combina con espacios de nombres, la única sintaxis legal para declarar es declare(encoding='...'); donde ... es el valor del encoding. declare(encoding='...') {} resultará en un error de análisis cuando se combina con espacios de nombres.
El valor declarado de encoding es ignorado en PHP 5.3 a menos que php esté compilado con --enable-zend-multibyte.
Tener en cuenta que PHP no expone si --enable-zend-multibyte fue utilizado para compilar PHP que no sea por phpinfo().
Ver también zend.script_encoding.