Llançament del llenguatge de programació PHP 8.3

Després d'un any de desenvolupament, es va presentar el llançament del llenguatge de programació PHP 8.3. La nova branca inclou una sèrie de novetats, així com diversos canvis que trenquen la compatibilitat.

Canvis clau a PHP 8.3:

  • Durant la clonació de classes, és possible reinicialitzar propietats amb l'atribut "readonly". La substitució de propietats de només lectura només es permet dins de la funció “__clone”: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // es permet tot i que la propietat "createdAt" és només de lectura. } }
  • S'ha proporcionat la possibilitat d'utilitzar constants amb indicació de tipus en classes, trets i enumeracions: class Foo { const string BAR = 'baz'; }
  • S'ha afegit suport per a l'atribut "#[Override]", amb el qual el desenvolupador pot informar a l'intèrpret que el mètode marcat anul·la algun mètode pare. Si no hi ha cap anul·lació, l'intèrpret mostrarà un error.
  • S'ha canviat la gestió dels valors negatius com a índex de matriu. Per exemple, quan s'afegeix un element amb el número “-5” a una matriu buida i s'afegeix un altre element, anteriorment el segon element es desava amb l'índex “0”, però a partir de la versió PHP 8.3 es desarà amb l'índex “-4” . $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Va ser matriu (-5 => 'a', 0 => 'b') // Va ser matriu (-5 => 'a', -4 => 'b')
  • S'ha afegit la possibilitat de crear classes anònimes en mode de només lectura: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • S'ha afegit la funció json_validate() per comprovar ràpidament si una cadena està en format JSON sense realitzar operacions de descodificació. json_validate(cadena $json, int $profunditat = 512, int $flags = 0): bool
  • S'han afegit nous mètodes a la classe Randomizer, que proporciona una API d'alt nivell per generar números i seqüències pseudoaleatòries: getBytesFromString per generar una cadena d'una mida determinada, utilitzant en ordre aleatori els caràcters presents en una altra cadena; getFloat i nextFloat per generar un nombre de coma flotant aleatori que estigui dins de l'interval especificat.
  • S'ha afegit la capacitat de recuperar constants utilitzant la sintaxi de classe dinàmica: class Foo { const BAR = 'bar'; } $nom = 'BARRA'; // Anteriorment, per recuperar la constant BAR, calia cridar constant(Foo::class . '::' . $name); // Ara només cal especificar Foo::{$name};
  • S'ha afegit la generació d'excepcions individuals (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) en cas de problemes que sorgeixen en operacions que treballen amb dates i hora.
  • Gestió millorada dels errors que es produeixen durant l'anàlisi de dades serialitzades a la funció unserialize(). En cas de problemes, unserialize() ara emet E_WARNING en lloc d'E_NOTICE.
  • S'han fet canvis a la funció range(). Es genera una excepció quan s'intenta passar objectes, recursos o matrius en variables que defineixen límits d'interval, així com quan s'especifica un valor negatiu al paràmetre $step o un valor no definit en qualsevol paràmetre. Ara es pot emetre una llista de caràcters quan s'especifiquen cadenes en lloc de números (per exemple, "range('5', 'z')").
  • S'ha canviat el comportament dels trets amb propietats estàtiques, que ara anul·len les propietats estàtiques heretades de la classe pare.
  • S'ha afegit la configuració per a la protecció de desbordament de la pila. Les directives zend.max_allowed_stack_size i zend.reserved_stack_size s'han afegit al fitxer ini, definint la mida màxima de pila permesa i reservada. El programa es bloquejarà quan s'acosti l'esgotament de la pila, quan la pila estigui plena més que la diferència entre zend.max_allowed_stack_size i zend.reserved_stack_size (l'execució s'aturarà abans que es produeixi un error de segmentació). De manera predeterminada, el valor zend.max_allowed_stack_size s'estableix en 0 (0: la mida es determina automàticament; per desactivar la limitació, podeu establir-la en -1).
  • S'han afegit noves funcions POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() i posix_eaccess().
  • S'ha afegit la funció mb_str_pad, que és un anàleg de la funció de cadena str_pad(), dissenyada per funcionar amb codificacions de diversos bytes com ara UTF-8.
  • Us permet crear tancaments a partir de mètodes i passar arguments amb nom a aquests tancaments. $prova = prova nova (); $tancament = $test->màgia(…); $tancament(a: 'hola', b: 'món');
  • S'ha canviat el comportament en gestionar la visibilitat de constants a les interfícies. interfície I { public const FOO = 'foo'; } implements de classe C I { private const FOO = 'foo'; }
  • S'han ampliat les capacitats de les funcions array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() i proc_get_status().
  • La capacitat de passar un valor negatiu de $widths a mb_strimwidth() ha quedat obsoleta. S'ha eliminat la constant NumberFormatter::TYPE_CURRENCY. S'ha interromput el suport per cridar la funció ldap_connect() amb dos paràmetres $host i $port. La configuració opcache.consistency_checks s'ha eliminat.

Font: opennet.ru

Afegeix comentari