php

Declara strict types en tus ficheros PHP

Desde la versión 7 de PHP tenemos disponible la directiva strict_types. Esto nos permite declarar el modo estricto para tipos escalares en un archivo de PHP. No en toda la aplicación, tema o plugin… únicamente en el archivo donde se declare.

Declarar strict types en nuestros ficheros PHP, forzará a que nuestros métodos acepten variables únicamente del tipo exacto que se declaren. En caso contrario lanzará un TypeError.

Esto nos permitirá que nuestro desarrollo sea más robusto, y que nuestros métodos no se traguen cualquier cosa. También se puede aplicar para el retorno, es decir, si un método tiene que devolver una cadena, se forzará a que siempre sea así… si sucede algo entre medias y devuelve un entero o un array… obtendremos un TypeError.

El plugin de ecommerce más fácil de usar para WordPress

Si obtenemos un TypeError querrá decir que nuestro método en algún punto ha hecho algo que no teníamos contemplado, y está devolviendo un valor que no queremos, o está recibiendo algún argumento de un tipo diferente al que esperamos.

Lo «malo» de todo esto, es que si queremos que nuestra aplicación sea estricta y robusta, tendremos que declarar el modo estricto en todos los archivos PHP de nuestro desarrollo.

Importante, la declaración de strict_types debe hacerse en la primera línea, nada más abrir PHP:

<?php declare( strict_types = 1 );

echo 'Hola, mundo!';

Y los tipos que podemos declarar son los siguientes:

array

 
function foo(array $bar)PHP 5.1+
function foo(array $bar = null)PHP 5.1+
function foo(): arrayPHP 7.0+
function foo(): ?arrayPHP 7.1+

bool

 
function foo(bool $bar)PHP 7.0+
function foo(bool $bar = null)PHP 7.0+
function foo(): boolPHP 7.0+
function foo(): ?boolPHP 7.1+

callable

 
function foo(callable $bar)PHP 5.4+
function foo(callable $bar = null)PHP 5.4+
function foo(): callablePHP 7.0+
function foo(): ?callablePHP 7.1+

float

 
function foo(float $bar)PHP 7.0+
function foo(float $bar = null)PHP 7.0+
function foo(): floatPHP 7.0+
function foo(): ?floatPHP 7.1+

int

 
function foo(int $bar)PHP 7.0+
function foo(int $bar = null)PHP 7.0+
function foo(): intPHP 7.0+
function foo(): ?intPHP 7.1+

iterable

 
function foo(iterable $bar)PHP 7.1+
function foo(iterable $bar = null)PHP 7.1+
function foo(): iterablePHP 7.1+
function foo(): ?iterablePHP 7.1+

object

 
function foo(object $bar)PHP 7.2+
function foo(object $bar = null)PHP 7.2+
function foo(): objectPHP 7.2+
function foo(): ?objectPHP 7.2+

self

 
function foo(self $bar)PHP 5.0+
function foo(self $bar = null)PHP 5.1+
function foo(): selfPHP 7.0+
function foo(): ?selfPHP 7.1+

string

 
function foo(string $bar)PHP 7.0+
function foo(string $bar = null)PHP 7.0+
function foo(): stringPHP 7.0+
function foo(): ?stringPHP 7.1+

class names

 
function foo(ClassName $bar)PHP 5.0+
function foo(ClassName $bar = null)PHP 5.1+
function foo(): ClassNamePHP 7.0+
function foo(): ?ClassNamePHP 7.1+

void

 
function foo(): voidPHP 7.1+

Al declarar strict_types, las propias funciones de PHP también se rigen por el modo estricto, por lo tanto generarán TypeError si no reciben los parámetros tal y cómo los esperan, en lugar de emitir un warning.

Pues ya no tienes excusa para crear tus desarrollos de una manera más robusta y fiable 😉

¿Te ha resultado útil esta información? 🍺

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.

Comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *:

  • El fin del tratamiento es únicamente la moderación de comentarios para evitar spam
  • La legitimación es tu consentimiento al comentar
  • No se comunicará ningún dato a terceros salvo por obligación legal
  • Tienes derecho al acceso, rectificación y eliminación de los comentarios