declare

(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
7.0.0 Se añadió la directiva strict_types
5.3.0 Se añadió la directiva encoding

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í
?>

Ticks

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().

Encoding

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í
?>

Precaución

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.