Inicio > PHP > Php 7

PHP 7

24/11/2017PHP

 

Acabo de migrar mi página web a php 7 y la verdad pensé que iba a ser más crítico. Lo único que he tenido que cambiar es que para conectarse a MySQL hay que usar mysqli o pdo.
Uno de los cambios que me ha sorprendido es el Operador combinado de comparación.
Otro cambio como que me ha gustado es sobre los parámetros de las funciones hay que definir los tipos de los parámetros de entrada y del valor de retorno de la función. Es fácil y sencillo como se explica en el siguiente ejemplo:

function getTotal(float $a, float $b) : float {
.....
return $number
}

En el ejemplo anterior se definen que los parámetro de entrada $a y $b son de tipo float y poniendo : float se le indica a la función que el valor que devuelve tiene que ser de tipo float. Pero cuidado si se pone que el tipo de retorno es int no da error sino se devuelve un int, para forazarlo hay que usar la directiva declare(strict_types=1);. Voy a poner un ejemplo:

function getTotal(float $a, float $b) : int {
return $a + $b;
}

getTotal(2, "1 week");
// cambia int(2) a float(2.0) y string("1 week") a float(1.0)
// devuelve int(3);

getTotal(2.8, "3.2");
// cambia string "3.2" a float(3.2)
// devuelve int(6)

getTotal(2.5, 1);
// cambia int(1) a float(1.0)
// devuelve int(3)


En el ejemplo anterior se muestra lo que ocurre al no usar la directiva declare(strict_types=1);. En el siguiente ejemplo al ponerla si que se producirá el error correspondiente:

//Ojo: Debe ir al principio del fichero
declare(strict_types=1);

function getTotal(float $a, float $b) : int {
// return $a + $b;
// Fatal error: Uncaught TypeError: Return value of getTotal() must be of the type integer, float returned
return (int)($a + $b); // truncate float like non-strict
} )


La directiva declare(strict_types=1); comprueba que coinciden los tipos en las variables declaradas, en el paso de parámetros en métodos y en la dvolución de valores de los métodos y se tiene que poner al principio del fichero, incluso antes de la definicion del namespace. Pero no se puede hacer de manera global, es decir, que hay que añadir esta directiva en todos los archvios en los que se vaya a utilizar.
Otra novedad es que se reemplaza la extensión json por jsond, se permiten múltiples default en switch, se filtra el unserialize() ya que era un error de seguridad como se especificaba sobre la inyección de objetos.
Otra novedad y que es bastante importante es que es bastante más rápido que las versiones anteriores. El nuevo motor de php convierte todos los errores fatales en excepciones por lo que pueden ser mnajeados por el programador.
Otra novedad es el operador de coalescencia nulo que es una mejora del conocido como operador Elvis, que es a su vez una mejora del operador ternario