Lanzamento da linguaxe de programación PHP 8.3

Despois dun ano de desenvolvemento, presentouse o lanzamento da linguaxe de programación PHP 8.3. A nova rama inclúe unha serie de novidades, así como varios cambios que rompen a compatibilidade.

Cambios clave en PHP 8.3:

  • Durante a clonación da clase, é posible reiniciar as propiedades co atributo "readonly". A substitución das propiedades de só lectura só se permite dentro da función “__clone”: clase de só lectura Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // permitido aínda que a propiedade "createdAt" é de só lectura. } }
  • Proporcionouse a capacidade de usar constantes con indicación de tipo en clases, trazos e enumeracións: class Foo { const string BAR = 'baz'; }
  • Engadiuse compatibilidade para o atributo "#[Anular]", co cal o programador pode informar ao intérprete de que o método marcado anula algún método pai. Se non hai ningunha anulación, o intérprete mostrará un erro.
  • Cambiouse o manexo de valores negativos como índice de matriz. Por exemplo, ao engadir un elemento co número "-5" a unha matriz baleira e engadir outro elemento, previamente gardábase o segundo elemento co índice "0", pero a partir da versión PHP 8.3 gardarase co índice "-4" . $matriz = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Foi matriz (-5 => 'a', 0 => 'b') // Converteuse en matriz (-5 => 'a', -4 => 'b')
  • Engadida a posibilidade de crear clases anónimas en modo de só lectura: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Engadiuse a función json_validate() para comprobar rapidamente se unha cadea está en formato JSON sen realizar operacións de decodificación. json_validate(cadea $json, int $profundidade = 512, int $flags = 0): bool
  • Engadíronse novos métodos á clase Randomizer, que proporciona unha API de alto nivel para xerar números e secuencias pseudoaleatorios: getBytesFromString para xerar unha cadea dun tamaño determinado, utilizando en orde aleatoria os caracteres presentes noutra cadea; getFloat e nextFloat para xerar un número de coma flotante aleatorio que estea dentro do intervalo especificado.
  • Engadida a capacidade de recuperar constantes usando a sintaxe de clase dinámica: class Foo { const BAR = 'bar'; } $nome = 'BARRA'; // Anteriormente, para recuperar a constante BAR, tiñas que chamar constante(Foo::class . '::' . $name); // Agora só especifique Foo::{$nome};
  • Engadiuse a xeración de excepcións individuais (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) en caso de problemas que xurdan nas operacións que traballan con datas e hora.
  • Mellorado o manexo dos erros que se producen durante a análise de datos serializados na función unserialize(). En caso de problemas, agora unserialize() emite E_WARNING en lugar de E_NOTICE.
  • Realizáronse cambios na función range(). Xérase unha excepción ao tentar pasar obxectos, recursos ou matrices en variables que definen límites de intervalos, así como ao especificar un valor negativo no parámetro $step ou un valor indefinido en calquera parámetro. Proporcionouse a saída dunha lista de caracteres ao especificar cadeas en lugar de números (por exemplo, "range('5', 'z')").
  • Cambiouse o comportamento dos trazos con propiedades estáticas, que agora anulan as propiedades estáticas herdadas da clase pai.
  • Engadiuse a configuración para a protección de desbordamento da pila. Engadíronse as directivas zend.max_allowed_stack_size e zend.reserved_stack_size ao ficheiro ini, definindo o tamaño máximo de pila permitido e reservado. O programa fallará cando se achegue ao esgotamento da pila, cando a pila estea chea máis que a diferenza entre zend.max_allowed_stack_size e zend.reserved_stack_size (a execución deterase antes de que se produza un fallo de segmentación). De xeito predeterminado, o valor zend.max_allowed_stack_size establécese en 0 (0; o tamaño determínase automaticamente; para desactivar a limitación, pode configuralo en -1).
  • Engadíronse novas funcións POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() e posix_eaccess().
  • Engadiuse a función mb_str_pad, que é un análogo da función de cadea str_pad(), deseñada para funcionar con codificacións de varios bytes como UTF-8.
  • Permítelle crear peches a partir de métodos e pasar argumentos con nome a eses peches. $proba = nova proba (); $peche = $proba->maxia(…); $peche(a: 'ola', b: 'mundo');
  • Cambiouse o comportamento ao manexar a visibilidade das constantes nas interfaces. interface I { public const FOO = 'foo'; } implementos de clase C I { private const FOO = 'foo'; }
  • Ampliáronse as capacidades das funcións array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() e proc_get_status().
  • A capacidade de pasar un valor $widths negativo a mb_strimwidth() quedou en desuso. Eliminouse a constante NumberFormatter::TYPE_CURRENCY. O soporte para chamar á función ldap_connect() con dous parámetros $host e $port foi descontinuado. Eliminouse a opción opcache.consistency_checks.

Fonte: opennet.ru

Engadir un comentario