array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'es', ), 'this' => array ( 0 => 'control-structures.declare.php', 1 => 'declare', ), 'up' => array ( 0 => 'language.control-structures.php', 1 => 'Estructuras de Control', ), 'prev' => array ( 0 => 'control-structures.match.php', 1 => 'match', ), 'next' => array ( 0 => 'function.return.php', 1 => 'return', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'es', 'path' => 'language/control-structures/declare.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
declare
(PHP 4, PHP 5, PHP 7, PHP 8)
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í
?>
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.