PHP es uno de los lenguajes de pro­gra­ma­ción más fáciles de aprender. Con un buen tutorial de PHP y la mo­ti­va­ción adecuada, puedes escribir tus primeros scripts y ejecutar comandos en pocas horas. PHP 7 ya trajo consigo una gran op­ti­mi­za­ción de la velocidad, lo que aumentó su prestigio. Con la versión 8.0, se produjo una gran ac­tua­li­za­ción en el lenguaje de código abierto. Después de un año, otra pequeña ac­tua­li­za­ción, la 8.1, está aquí.

¿Qué ca­ra­c­te­rí­s­ti­cas presenta PHP 8.1?

PHP 8.1 ha sido lanzado en versión beta y está siendo probado en la ac­tua­li­dad. La ac­tua­li­za­ción de­fi­ni­ti­va no llegará hasta noviembre de 2021, pero ya se conocen las novedades:

  • Enum: Las llamadas enu­me­ra­cio­nes (enu­me­ra­cio­nes con número de­te­r­mi­na­do de valores) están ahora di­s­po­ni­bles como tipo variable.
  • Fibers: El nuevo tipo de bloque de código fibers te ofrece la po­si­bi­li­dad de ejecutar múltiples hilos de programa en paralelo.
  • Arrays: Desde PHP 7.4 se pueden des­em­pa­que­tar arrays con valores numéricos. Ahora esto también es posible para las matrices con cadenas.
  • Readonly: A partir de ahora, las pro­pie­da­des de las clases pueden marcarse como de solo lectura ('rea­do­n­l­y'), y, por tanto, ya no son mo­di­fi­ca­bles.
  • In­te­r­se­c­ción: Los tipos de in­te­r­se­c­ción (bá­si­ca­me­n­te los homólogos de los tipos de unión) están ahora di­s­po­ni­bles.
  • Never: El nuevo valor de retorno 'never' indica que una función se termina y no devuelve ningún otro valor.
  • Final: Ahora puedes marcar las co­n­s­ta­n­tes de la clase con 'final' para que no puedan ser mo­di­fi­ca­das por las subclases.
  • Fsync: PHP 8.1 introduce las dos funciones 'fsync' y 'f­da­ta­s­y­n­c' para si­n­cro­ni­zar los datos del buffer al medio de al­ma­ce­na­mie­n­to.
  • Octal: Para indicar el sistema numérico octal, además del '0' (cero), se puede utilizar en el futuro el prefijo '0o' (cero y O minúscula).
  • Globals: El uso de '$GLOBALS' ha sido li­ge­ra­me­n­te re­s­tri­n­gi­do y ahora resulta en un mensaje de error en algunos casos.
  • Null: Las funciones internas ya no aceptarán valores nulos en ar­gu­me­n­tos no anulables.
Nota

Esta es solo una selección de los cambios más in­te­re­sa­n­tes de PHP 8.1. Se pueden encontrar muchas más novedades en el wiki oficial con todos los co­me­n­ta­rios.

PHP 8: la­n­za­mie­n­to en noviembre de 2020

El 26 de noviembre de 2020 había llegado el momento: con el la­n­za­mie­n­to de PHP 8.0.0 se daba a conocer la última versión del popular lenguaje de scripting. Esto co­rre­s­po­n­de al ciclo habitual de tres años de PHP. El pre­de­ce­sor, PHP 7.4, había estado activo alrededor de un año, después de que se fi­na­li­za­ra con el soporte para PHP 7.1. A finales de 2020 también se suspendió el soporte para PHP 7.2.

Muchas páginas web escritas en PHP utilizan aún una versión antigua. Aunque esto es posible, se re­co­mie­n­da no hacerlo. Mantener el código de la página web ac­tua­li­za­do y usar las versiones nuevas de PHP puede traer consigo di­fe­re­n­tes ventajas. Las nuevas versiones ofrecen más variedad, el re­n­di­mie­n­to aumenta co­n­si­de­ra­ble­me­n­te y el nivel de seguridad es más alto.

¡Ya puedes probar PHP 8!

¡Ya puedes probar PHP 8! ¿Aún no eres cliente de IONOS? Entonces reserva ahora una de nuestras eco­nó­mi­cas ofertas de alo­ja­mie­n­to web. En tu cuenta de cliente de IONOS, podrás cambiar la versión actual de PHP y adquirir PHP 8 o PHP 8.1 (tan pronto como esté di­s­po­ni­ble).

¿Habrá co­m­pli­ca­cio­nes con los códigos antiguos?

Puesto que PHP 8 es una nueva versión principal, hay que tener en cuenta que algunos códigos antiguos no serán co­m­pa­ti­bles. La mayoría de los cambios que podrían presentar co­m­pli­ca­cio­nes ya estaban obsoletos en las versiones 7.2, 7.3 y 7.4.

Los últimos cambios incluyen:

  • The real type
  • Magic quotes legacy
  • array_key_exists() with objects
  • FILTER_SANITIZE_MAGIC_QUOTES filter
  • Re­fle­c­tion export() methods
  • mb_strrpos() with encoding as 3rd argument
  • implode() parameter order mix
  • Unbinding $this from non-static closures
  • hebrevc() function
  • convert_cyr_string() function
  • money_format() function
  • ezmlm_hash() function
  • restore_include_path() function
  • allow_url_include ini directive

Si has mantenido tu código ac­tua­li­za­do, no tendrás ningún problema, incluso teniendo la nueva ac­tua­li­za­ción cambios in­co­m­pa­ti­bles con versiones an­te­rio­res. En la página oficial del proyecto PHP puedes encontrar una lista completa con todos los cambios.

Nota

Microsoft ha anunciado que la compañía ya no ofrecerá co­m­pa­ti­bi­li­dad de Windows para PHP 8 y versiones po­s­te­rio­res. Sin embargo, los de­sa­rro­lla­do­res de PHP ya han anunciado su intención de so­lu­cio­nar el problema.

Nuevas ca­ra­c­te­rí­s­ti­cas de PHP 8

La nueva versión de PHP presenta nuevas ca­ra­c­te­rí­s­ti­cas que amplían las po­si­bi­li­da­des de los de­sa­rro­lla­do­res web. A co­n­ti­nua­ción, te pre­se­n­ta­mos los cambios más im­po­r­ta­n­tes con respecto a versiones an­te­rio­res.

Nota

El 30 de noviembre de 2020, PHP 7.2 llegará a su fecha oficial de fin de vida (EOL) y dejará de ser co­m­pa­ti­ble. Para más in­fo­r­ma­ción, consulta nuestro artículo sobre este tema.

Co­m­pi­la­dor JIT

La mayor novedad es el co­m­pi­la­dor JIT, que ha mejorado co­n­si­de­ra­ble­me­n­te el re­n­di­mie­n­to. PHP no se compila, sino que se in­te­r­pre­ta línea por línea. El co­m­pi­la­dor JIT (Just in Time) compila parte del código durante el tiempo de ejecución, por lo que funciona de manera muy similar a una versión en caché del código.

Esta ca­ra­c­te­rí­s­ti­ca de PHP 8 ya fue probada de manera muy exitosa por Pedro Escudero. Usó un script simple para comparar las versiones 5.3, 7.4 y 8 (con y sin JIT). Para ello, ejecutó el script cien veces en cada versión y calculó el tiempo promedio.

El resultado fueron los si­guie­n­tes valores:

Versión Tiempo en segundos
5.3 0,64574003219604
7.4 0,10253500938416
8 (sin JIT) 0,098223924636841
8 (con JIT) 0,053637981414795

Aunque la di­fe­re­n­cia entre la versión 7.4 y la 8 sin JIT no es muy grande, entre la 7.4 y la 8 con JIT es si­g­ni­fi­ca­ti­va. El co­m­pi­la­dor JIT pro­po­r­cio­na una mejora del re­n­di­mie­n­to de más del 45 %.

Tipos de unión (Union Types)

Los union types también aparecen en otros lenguajes como C/C++, Ty­pe­S­cri­pt o Haskell. Permiten crear uniones de dos o más tipos de datos, pu­dié­n­do­se utilizar cua­l­quie­ra de ellos. En el código, esto se vería de la siguiente manera:

public function foo(Foo|Bar $input): int|float;

Sin embargo, existe una li­mi­ta­ción. Void no puede formar parte de un union type, ya que no devuelve ningún valor. Además, las uniones nullable pueden es­cri­bi­r­se con |null o ?, como te mostramos en este ejemplo:

public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;

Tipo de retorno estático (Static return type)

Static es un nombre de clase especial y en la nueva versión será un tipo de retorno válido junto a self & parent.

WeakMap

En PHP 7.4 ya aparecían los WeakRefs y PHP 8 ofrece con WeakMaps una extensión de esta función. WeakMaps y WeakRefs pueden usarse para eliminar objetos, solo si la caché aún re­fe­re­n­cia a las clases de entidad de los objetos. Esto ofrece una ad­mi­ni­s­tra­ción de los objetos que ahorra recursos. Un ejemplo sacado de la do­cu­me­n­ta­ción:

class FooBar {
    private WeakMap $cache;
    public function getSomethingWithCaching(object $obj) {
        return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);
    }
    // ...
}

Usar ::class en los objetos

En versiones an­te­rio­res se tenía que usar get_class() para asignar una clase a los objetos. Ahora se puede aplicar ::class di­re­c­ta­me­n­te a los objetos. Esto ayuda a mantener el código más limpio.

Interfaz en­ca­de­na­ble (Stri­n­ga­ble interface)

Stri­n­ga­ble interface se añade au­to­má­ti­ca­me­n­te a las clases que im­ple­me­n­tan el método _toString(). Hasta ahora, este paso debía hacerse ma­nua­l­me­n­te. En el código se leería de la siguiente manera:

class Foo
{
    public function __toString(): string
    {
        return 'foo';
    }
}
function bar(Stringable $stringable) { /* … */ }
bar(new Foo());
bar('abc');

Función fdiv()

Con la nueva función fdiv() es posible una división por 0. Ahora se obtiene INF, -ING o NAN como valor de retorno.

Errores de tipo (Type errors)

An­te­rio­r­me­n­te, solo las funciones definidas por el usuario activaban los Ty­peE­rro­rs. Las funciones internas emitían una ad­ve­r­te­n­cia y daban null. Con PHP 8, la mayoría de las funciones internas también producen Ty­peE­rro­rs.

Re­cla­s­si­fied engine warnings

Hasta ahora había muchos errores que solo emitían un aviso. Esto se ha ac­tua­li­za­do. Aquí en­co­n­tra­rás un listado completo de los nuevos mensajes de error en PHP.

Firmas correctas de métodos mágicos

En versiones an­te­rio­res de PHP, se podía escribir métodos mágicos con firmas que no coin­ci­dían con la firma esperada, por ejemplo __clone(): float o __isset(): Closure. Desde el la­n­za­mie­n­to de PHP 7.0, solo se co­m­pro­ba­ba de forma aleatoria el uso correcto de los métodos mágicos. En la nueva versión se han incluido varios controles de pa­rá­me­tros y valores de retorno para ga­ra­n­ti­zar que las firmas son correctas.

Re­fle­c­tion

Las firmas Re­fle­c­tion se han cambiado. An­te­rio­r­me­n­te, Re­fle­c­tion se pre­se­n­ta­ba de la siguiente manera:

ReflectionClass::newInstance($args);
ReflectionFunction::invoke($args);
ReflectionMethod::invoke($object, $args);

En PHP 8, se escribe tal que:

ReflectionClass::newInstance(...$args);
ReflectionFunction::invoke(...$args);
ReflectionMethod::invoke($object, ...$args);

Para utilizar PHP 7 y PHP 8 si­mu­l­tá­nea­me­n­te, puedes formular el código como sigue:

ReflectionClass::newInstance($arg = null, ...$args);
ReflectionFunction::invoke($arg = null, ...$args);
ReflectionMethod::invoke($object, $arg = null, ...$args);
Consejo

¿Todavía no tienes tu propia página web? El alo­ja­mie­n­to web de IONOS es potente y adecuado para pri­n­ci­pia­n­tes. También ofrecen mucha fle­xi­bi­li­dad con el mejor re­n­di­mie­n­to los se­r­vi­do­res virtuales de IONOS. Elige la oferta que mejor se adapte a tu proyecto.

Ir al menú principal