Chose Language:
Author: Admin/Publisher |finished | checked

PHP declare

En PHP declare es un constructor, y su uso difiere mucho de las estructuras de control que estamos acostumbrados. Este constructor es utilizado para establecer directivas de ejecución para un bloque de código.

¿Pero qué queremos decir con esto?

Si has leído el artículo de CSP en PHP, puede que te des una idea de como funciona este constructor.

Pero vamos a que es una directiva en nuestra lengua

Una directiva es una instrucción o directriz que se da a alguien para que siga un curso de acción específico, en pocas palabras estamos diciéndole a nuestro bloque algo que debe de hacer cuando se ejecuta.

Directivas utilizables en declare

En el constructor declare tenemos 3 directivas utilizables, ticks, strict_type y encoding

ticks

https://blastcoding.com/php-declare/#ticks

Esta directiva permite ejecutar una función específica después de un número determinado de sentencias de bajo nivel.

Los eventos que ocurren en cada tick se especifican mediante la función register_tick_function()

Description / Descripción
register_tick_function(callable $function, mixed $arg = ?, mixed $... = ?): bool
Algo que debe de tener en cuenta es que register_tick_function() tambien genera un tick
Ejemplo de el uso de ticks
register_tick_function("miFuncion");// es una sentencia

function miFuncion() {
  echo "Se ha ejecutado la función miFuncion \n";
};
declare(ticks=2){
	for ($i = 0; $i < 5;$i++) {
	  echo "Iteración $i \n";// es una sentencia
	  echo "Iteración2 $i \n";// es una sentencia
	}
}
Iteración 0 
Iteración2 0 
Se ha ejecutado la función miFuncion 
Iteración 1 
Iteración2 1 
Se ha ejecutado la función miFuncion 
Iteración 2 
Iteración2 2 
Se ha ejecutado la función miFuncion 
Iteración 3 
Iteración2 3 
Se ha ejecutado la función miFuncion 
Iteración 4 
Iteración2 4 
Se ha ejecutado la función miFuncion 

Para entender los ticks puedes verlo como si fuera un reloj cada segundo genera un tick, solo que aqui cada sentencia basica tickable genera un tick.

Entendiendo los ticks
register_tick_function("miFuncion");

function miFuncion() {
  echo "Se ha ejecutado la función miFuncion \n";
};
declare(ticks=1){
	for ($i = 0; $i < 2;$i++) {
	  echo "Iteración $i \n";
	  echo "Iteración2 $i \n";
	}
}
Iteración 0 
Se ha ejecutado la función miFuncion 
Iteración2 0 
Se ha ejecutado la función miFuncion 
Iteración 1 
Se ha ejecutado la función miFuncion 
Iteración2 1 
Se ha ejecutado la función miFuncion 
Se ha ejecutado la función miFuncion 

En este ejemplo puedes ver que en su resultado vemos un último "Se ha ejecutado la función miFuncion" de más, esto se debe a que register_tick_function("miFuncion"); está generando este último tick y esto lo está haciendo fuera de nuestro loop

para las siguientes directivas se recomienda el uso de versiones >= PHP 8

strict_types

https://blastcoding.com/php-declare/#strict_types

strict_type solo puede tener dos valores:

  • 0: Deshabilita el tipado estricto. Este es el comportamiento predeterminado de PHP.
  • 1: Habilita el tipado estricto.

¿Qué es el tipado estricto?

Esto significa que el tipo de dato de cada variable y expresión debe ser compatible con el contexto en el que se usa. ¿Creo que esto ya lo habíamos visto en funciones en PHP?

En caso de usar Strict type

Con declare(strict_type=1)
<?php

declare(strict_types=1);

function holamundo(string $a, string $b){
    echo $a." ".$b;
}
holamundo(1,"mundo");
Fatal error: Uncaught TypeError: holamundo(): Argument #1 ($a) must be of type string, int given, called in C:\xampp\htdocs\tutorialphp\funciones.php on line 6 and defined in C:\xampp\htdocs\tutorialphp\funciones.php:3 Stack trace: #0 C:\xampp\htdocs\tutorialphp\funciones.php(6): holamundo(1, 'mundo') #1 {main} thrown in C:\xampp\htdocs\tutorialphp\funciones.php on line 3

vea que si o si $a debe ser un string y por tanto nos da un TypeError, ya que holamundo esta recibiendo un parámetro que es un entero

Encoding

https://blastcoding.com/php-declare/#encoding

Con declare también puedes especificar la codificación que quieres que se use en el script.

<?php
declare(encoding='ISO-8859-1');
// código aquí
?>
Las siguientes son las codificaciones mas utilizadas pero ante cualquier duda se recomienda el uso de UTF-8

UTF-8: Codificación Unicode por defecto en PHP, compatible con la mayoría de caracteres del mundo.

ISO-8859-1: Codificación de caracteres de 8 bits para idiomas de Europa occidental.

ASCII: Subconjunto de ISO-8859-1 compatible con caracteres ingleses básicos.

UTF-16: Codificación Unicode que usa 16 bits por caracter.

UTF-32: Codificación Unicode que usa 32 bits por caracter.

Windows-1252: Codificación de caracteres de 8 bits para idiomas de Europa occidental y Central.

ISO-2022-JP: Codificación de caracteres de 8 bits para japonés.

EUC-JP: Codificación de caracteres de varios bytes para japonés.

GB2312: Codificación de caracteres de varios bytes para chino simplificado.

Big5: Codificación de caracteres de varios bytes para chino tradicional.

Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category