È iniziato il test alfa di PHP 8.1

È stato presentato il primo rilascio alpha della nuova versione del linguaggio di programmazione PHP 8.1. Il rilascio è previsto per il 25 novembre. Le principali novità, già disponibili per i test o pianificate per l'implementazione in PHP 8.1:

  • È stata aggiunta la supporto per le enumerazioni, ad esempio, ora è possibile utilizzare le seguenti strutture: enum Status { case Pending; case Active; case Archived; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • È stato aggiunto il supporto per i fiber, che consentono di gestire il parallelismo a un livello più basso. Il supporto per i fiber sarà aggiunto ai framework Amphp e ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume('after resuming');
  • È stata migliorata l'implementazione della cache per il codice oggetto (opcache), che ora consente la memorizzazione in cache delle informazioni sull'ereditarietà delle classi. Questa ottimizzazione ha permesso di aumentare le prestazioni di alcune applicazioni del 5-8%.
  • L'operatore di espansione all'interno degli array «…$var», che consente di eseguire la sostituzione di array esistenti durante la definizione di un nuovo array, è stato esteso per supportare le chiavi stringa (in precedenza erano supportate solo le chiavi numeriche). Ad esempio, ora è possibile utilizzare nel codice: $array1 = ['a' => 1]; $array2 = ['b' => 2]; $array = ['a' => 0, …$array1, …$array2]; var_dump($array); // ['a' => 1, 'b' => 2]
  • È stato introdotto un nuovo tipo «never», che può essere utilizzato per informare gli analizzatori statici che una funzione termina l'esecuzione del programma, ad esempio, lanciando un'eccezione o eseguendo la funzione exit. function dd(mixed $input): never { exit; }
  • È stata proposta una nuova funzione array_is_list, che consente di determinare che le chiavi in un array sono disposte in ordine crescente di valori numerici, a partire da 0: $list = ['a', 'b', 'c']; array_is_list($list); // true $notAList = [1 => 'a', 2 => 'b', 3 => 'c']; array_is_list($notAList); // false $alsoNotAList = ['a' => 'a', 'b' => 'b', 'c' => 'c']; array_is_list($alsoNotAList); // false
  • È stata proposta la possibilità di ridefinire le costanti in una classe durante il processo di eredità. Per vietare la ridefinizione delle costanti della classe genitore, è possibile utilizzare la parola chiave «final». class Foo { public const X = «foo»; final public const Z = «foo»; } class Bar extends Foo { public const X = «bar»; }
  • Sono state proposte le funzioni fsync e fdatasync per forzare il salvataggio delle modifiche dalla cache del disco. $file = fopen(«sample.txt», «w»); fwrite($file, «Some content»); if (fsync($file)) { echo «File è stato persistito con successo su disco.»; } fclose($file);
  • È stata aggiunta la possibilità di utilizzare i prefissi «0o» e «0O» per i numeri ottali, oltre al prefisso «0» precedentemente utilizzato. 016 === 0o16; // true 016 === 0O16; // true
  • È stata proposta una limitazione selettiva dell'uso di $GLOBALS, il che porterà a una rottura della retrocompatibilità, ma consentirà di accelerare notevolmente le operazioni sugli array. Ad esempio, si sta valutando la possibilità di vietare la scrittura in $GLOBALS e il passaggio di $GLOBALS per riferimento. L'analisi di 2000 pacchetti ha mostrato che solo 23 di essi sarebbero interessati da questa modifica. Ad esempio, in caso di approvazione della proposta in 8.1, sarà interrotta la supporto a espressioni come: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • È proseguito il lavoro per la conversione delle funzioni dall'utilizzo delle risorse alla manipolazione degli oggetti. Le funzioni finfo_* e imap_* sono state convertite in oggetti.
  • È stata dichiarata obsoleta la trasmissione di valori null come argomenti di funzioni interne contrassegnate come non nullable. In PHP 8.1 l'uso di costrutti come str_contains(«string», null) porterà a un avviso, mentre in PHP 9 a un errore.
  • È stato aggiunto il supporto per gli algoritmi di hashing MurmurHash3 e xxHash.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster