PHP es un lenguaje de programación utilizado por una gran cantidad de usuarios con fines de desarrollo web. La última versión estable y actualizada de PHP, 8.3, se lanzó el 23.11.2023. Ha habido muchas innovaciones y cambios desde PHP 3.x, lanzado en 2000. PHP todavía se encuentra entre los lenguajes de desarrollo web (diseño web) más populares utilizados por una audiencia muy grande. En este artículo, examinaremos y analizaremos las innovaciones y cambios en PHP 8.3 con ejemplos de código.

PHP 8.3 Principales nuevas características y mejoras

Hay muchas innovaciones y mejoras importantes en PHP 8.3 en comparación con la versión anterior de PHP, PHP 8.2. Al mismo tiempo, algunas funciones han quedado obsoletas. Ahora examinaremos las innovaciones y mejoras una por una con ejemplos de código.

Constantes de clase escritas

La declaración de tipo es una característica muy importante para los desarrolladores que aumenta la estabilidad y reduce las tasas de error en el desarrollo web. La función de declaración de tipos para propiedades en una clase se agregó en PHP 7.4. Aunque se realizaron muchas mejoras a esta característica en versiones posteriores, esta característica todavía no estaba disponible para las constantes de la clase. Con PHP 8.3, ahora es posible declarar tipos de constantes en clases.

// Doğru kullanım:
class MyClass {
    // Bildirilen tür ve değer aynı
    const string VERSION = "PHP 8.3"; // değer string
}

// Hatalı kullanım:
class MyClass {
    // Bildirilen tür ile değer farklı
    const int VERSION = "PHP 8.3"; // değer string
}

// Hatalı kullanım:
class MyClass {
    // Bildirilen tür sınıf sabitleri için desteklenmiyor
    const void VERSION = "PHP 8.3"; // değer string
}

Algunas declaraciones de tipos no son compatibles con las constantes de clase.

Declaraciones de tipos no admitidas para constantes de clase: void, callable, never

Una nueva función: json_validate()

Cuando trabajamos con datos en formato JSON (datos codificados en json), debemos verificar que los datos entrantes sean válidos antes de usarlos. Estábamos haciendo esto en versiones anteriores a PHP 8.3 usando los siguientes métodos o métodos similares.

// PHP 8.3'ten önceki sürümlerde JSON verisini doğrulama

$data = $json_decode($maybeJSON);

if (json_last_error() === JSON_ERROR_NONE) {
    // $data ile gerçekleştirilecek işlemler
}

En este antiguo ejemplo, al validar datos JSON, PHP puede consumir una cantidad significativa de memoria, según el tamaño de los datos. En PHP 8.3, se agregó una nueva función PHP que crea una solución rápida orientada al rendimiento: json_validate(). A continuación, ejemplificamos el escenario de uso de esta función.

// PHP 8.3'te JSON verisini doğrulama
$data = $json_decode($maybeJSON);

if (json_validate($maybeJSON)) {
    // $data ile gerçekleştirilecek işlemler
}

Una nueva característica: #[Anular]

Al implementar interfaces en PHP, proporcionamos funcionalidad detallada para los métodos en la interfaz. Al crear una instancia de una clase, podemos anular un método principal creando una versión alternativa con el mismo nombre y firma compatible. Esto puede causar problemas importantes en el software. En resumen, el problema es que creemos que hemos anulado el método principal como resultado de un pequeño error tipográfico que se pasó por alto.

La función PHP 8.3 #[Anular] proporciona una solución para este problema. Ahora veamos esto en el ejemplo.

class A {
    protected function myOverrideFunc(): void {}

// Doğru kullanım
// Bu örnek çalışacak
// Üstteki sınıfta ilgili method var ve geçersiz kılındı
class B extends A {
    #[\Override]
    public function myOverrideFunc(): void {}

// Hatalı kullanım
// Bu örnek çalışmayacak, çünkü ana sınıfta method yok
// Muhtemelen gözden kaçan bir yazım hatası
class C extends A {
    #[\Override]
    public function myOverrideFunction(): void {}
}

Clonación profunda de propiedades de solo lectura

PHP introdujo la posibilidad de declarar propiedades de clases individuales como de solo lectura en PHP 8.1 y asignarlas a toda la clase en PHP 8.2. Sin embargo, la mayoría de los desarrolladores web pensaron que las limitaciones impuestas al trabajar con clases que contienen tales características impedían la practicidad en la lógica de programación.

para cambiar esto RFC Se hicieron dos recomendaciones principales:

solo lectura

  1. readonly Permitir que las clases que no están permitidas se extiendan.
  2. readonly permitir que las funciones se reinicien durante la clonación

La segunda sugerencia se incluyó en PHP 8.3. Este nuevo enfoque agregado a PHP 8.3 readonly instancias de una clase con propiedadesreadonly propiedades) __clone Permite reiniciarlo con su método mágico.

Este ejemplo de código del RFC puede ayudarnos a comprender cómo funciona este nuevo método:

Obtención dinámica de constantes de clase y miembros de enumeración

A diferencia de otras funciones de PHP, capturar constantes de clase y miembros de enumeración con nombres de variables es un poco más complicado. Antes de PHP 8.3 podíamos hacer esto como en el siguiente ejemplo:

class Foo {
    public function __construct(
        public readonly DateTime $bar,
        public readonly DateTime $baz
    ) {}

    public function __clone() {
        // Klon çağrıldığında $bar yeni bir DateTime alacak
        $this->bar = clone $this->bar;

        // Ardından bu metod çağrılacak
        $this->cloneBaz();
    }

    private function cloneBaz() {
       // Bu __clone içinden çağrıldığından dolayı doğru bir kullanımdır
        unset($this->baz);
    }
}

$foo = new Foo(new DateTime(), new DateTime());
$foo2 = clone $foo;
class MyClass {
    public const THE_CONST = 9;
}

enum MyEnum: int {
    case FirstMember = 9;
    case SecondMember = 10;
}

$constantName = 'THE_CONST';
$memberName = 'FirstMember';

echo constant('MyClass::' . $constantName);
echo constant('MyEnum::' . #memberName)->value;

Ahora, obtengamos los valores usando las definiciones de clase y enumeración en el ejemplo anterior en PHP 8.3:

$constantName = 'THE_CONST';
$memberName = 'FirstNumber';

echo MyClass::{$constantName};
echo MyEnum::{$memberName}->value;

Un nuevo método: getBytesFromString()

Podemos decir que este método fue el más inesperado entre las características agregadas en PHP 8.3: Generar texto aleatorio usando una colección de caracteres previamente aprobados.

Este nuevo método es muy sencillo y claro. Le damos algunos caracteres al método como recursos y especificamos cuántos de ellos queremos usar. ¡Eso es todo! Ahora nuestro método devolverá resultados con caracteres aleatorios hasta que alcance la longitud especificada. Ahora aclaremos esto con un ejemplo.

$generateRandomString = new Random\Randomizer();
$allowedChars = 'ABCDEFGHJKMNPQRSTVWXYZ';

$generateRandomString->getBytesFromString($allowedChars, 6) // "MBDSFD" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 6) // "DJSDKA" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 4) // "SDLA" - rastgele gelen veri

Es posible que la salida sea más larga que la longitud total de los caracteres que especificamos. Hicimos esto en el siguiente ejemplo:

$generateRandomString = new Random\Randomizer();
$allowedChars = '123456';

$generateRandomString->getBytesFromString($allowedChars, 8) // "47384252" - rastgele gelen veri

Si todos los caracteres que damos como parámetros son diferentes, la probabilidad de cuál será seleccionado es igual. Sin embargo, podemos hacer que aparezcan más caracteres del mismo en la salida agregando más de uno del mismo carácter a nuestra lista de caracteres admitidos. Mostramos esto en el siguiente ejemplo.

$generateRandomString = new Random\Randomizer();
$allowedChars = 'AAAAA12345';

$generateRandomString->getBytesFromString($allowedChars, 5) // "4AA12" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 8) // "38A19AA5" - rastgele gelen veri

Nuevos métodos: getFloat() y nextFloat()

En esta innovación, PHP 8.3 introduce dos nuevos métodos que extienden la extensión aleatoria de PHP: getFloat() y nextFloat().

Un ejemplo de estos métodos:

$generateRandomNumber = new Random\Randomizer();

// Rastgele ondalıklı (float) bir rakam oluştur
// Değer 0 ile 5 arasında olsun
$generateRandomNumber->getFloat(0,5); // 2.483929 - rastgele gelen veri

// 0 ile 1 arasında rastgele ondalıklı bir rakam oluştur
$generateRandomNumber->nextFloat(); // 0.4828258 rastgele gelen veri

Innovaciones y mejoras menores en PHP 8.3

Además de las innovaciones anteriores, PHP 8.3 tiene docenas de otras mejoras e innovaciones a pequeña escala. Los hemos enumerado junto con sus documentos fuente en la siguiente lista.

En desuso en PHP 8.3

Con cada nueva versión de PHP, parte del código se marca para quedar obsoleto. Nunca se recomienda utilizar estas funciones una vez que estén completamente obsoletas. Si se utiliza código obsoleto, se devolverá un mensaje de error cuando se ejecute el código.

Lista de obsolescencias en PHP 8.3:

PHP 8.3

En este artículo, revisamos los cambios e innovaciones importantes en PHP 8.3. Para obtener una lista más detallada de todos los cambios en PHP 8.3 registro de cambios oficial Te recomendamos revisarlo. Si desea actualizar sus códigos o sitio de PHP 8.2 a PHP 8.3, esta guía puede ser útil: Guía de migración de PHP 8.3 -> https://www.php.net/manual/en/migration83.php

Si le preocupan las versiones de PHP y la migración, le recomendamos darle algo de tiempo a la nueva versión para actualizar a PHP 8.3.

Cobertura completa de PHP y JavaScript idiomas y tecnologías relacionadas como Onur Özden Web Çözümleri Software web Ofrecemos servicios.  Si tiene alguna pregunta o solicitud, puede contactarnos rápidamente a través del botón de Whatsapp en la parte inferior izquierda para obtener una cotización.