PHP 7.4: Novità e nuove funzionalità

PHP 7.4 è stato rilasciato il 28 novembre 2019. In questo post troverai un elenco di tutto ciò che è nuovo in php per aiutarti a preparare un eventuale aggiornamento. Iniziamo però con alcuni punti salienti, inclusi in PHP 7.4:

Nuove funzionalità

PHP 7.4 viene fornito con una notevole quantità di nuove funzionalità. Inizieremo con un elenco di tutte le nuove features, quindi esamineremo le modifiche e gli elementi deprecati.

Array Functions rfc

Le funzioni Array, cosa è cambiato?

Mentre prima scrivevi questo:

array_map(function (User $user) { 
   return $user->id; 
}, $users)

Ora puoi scrivere questo:

array_map(fn (User $user) => $user->id, $users)

Ci sono alcune note sulle funzioni array:

  • Possono sempre accedere all’ambito padre, non è necessaria la use keyword.
  • $this è disponibile proprio come le normali closures.
  • Le funzioni array possono contenere solo un’espressione, che può essere anche l’istruzione return.

Puoi leggerne approfonditamente qui .

Typed Properties rfc

Le variabili di classe possono essere di tipo hinted cioè “suggerito”:

class A
{
   publicstring $name; 
   public?Foo $foo; 
}

C’è molto da dire su questa funzionalità, quindi ti consiglio di leggere questo post dedicato.

Type Variance migliorata rfc

È bello vedere che alcuni miglioramenti, proposti dagli sviluppatori, stanno effettivamente arrivando in PHP. La varianza di tipo è un altro argomento degno di nota, ma in breve: potrai utilizzare tipi di ritorno covarianti –

class ParentType {}
class ChildType extends ParentType {}
class A
{
    public function covariantReturnTypes(): ParentType 
   { /* … */ } 
}
class B extends A
{
   public function covariantReturnTypes(): ChildType 
  { /* … */ } 
}

– e argomenti contro-covarianti.

class A
{
   public function contraVariantArguments(ChildType $type) 
  { /* … */ } 
}
class B extends A
{
   public function contraVariantArguments(ParentType $type) 
  { /* … */ } 
}

Operatore di assegnazione a coalescenza nulla rfc

Il prossimo è l’operatore di assegnazione a coalescenza nulla, una scorciatoia per le operazioni di questo tipo. Invece di fare questo:

$data['date'] = $data['date'] ?? new DateTime();

Ora puoi fare:

$data['date'] ??= new DateTime();

Operatore di diffusione array rfc

Successivamente, ora è possibile utilizzare l’operatore “…”  negli array:

$arrayA = [1, 2, 3];
$arrayB = [4, 5];
$result = [0, ...$arrayA, ...$arrayB, 6 ,7];
// [0, 1, 2, 3, 4, 5, 6, 7]

Si noti che funziona solo con matrici a chiavi numeriche.

Separatore numerico letterale rfc

PHP 7.4 consente di utilizzare i trattini bassi per separare visivamente, le migliaia, nei valori numerici. Così:

$unformattedNumber = 107925284.88;
$formattedNumber = 107_925_284.88;

I caratteri di sottolineatura vengono semplicemente ignorati dall’engine di PHP.

Foreign function interface rfc

Passando ad alcune funzionalità a livello di core: la foreign function interface o “FFI” in breve, ci consente di chiamare codice C. Questo significa che le estensioni PHP potrebbero essere scritte in puro PHP e caricate tramite composer.

Va notato però che questo è un argomento complesso. Ed hai bisogno di una buona conoscenza di C per poter utilizzare correttamente questa features.

PreLoading rfc

Un’altra caratteristica è il preloading. Un’aggiunta straordinaria al core di PHP, che può portare a significativi miglioramenti delle prestazioni.

In breve: se si utilizza un framework, i suoi file devono essere caricati e collegati ad ogni richiesta. Il preloading consente al server di caricare file PHP in memoria all’avvio e di averli permanentemente disponibili per tutte le richieste successive.

L’aumento delle prestazioni ha ovviamente un costo: se l’origine dei file precaricati viene modificata, il server deve essere riavviato.

Vuoi saperne di più? clicca qui per approfondire l’argomento.

Serializzazione di oggetti custom rfc

Sono stati aggiunti due nuovi fantastici metodi: __serialize __unserialize. La differenza tra questi metodi oltre a __sleep __wakeup è discussa nell’RFC.

Reflection per reference rfc

Alcune librerie, di Symfony ad esempio, fanno molto affidamento sull’API per scaricare in modo affidabile una variabile. PHP 7.4 aggiunge la classe ReflectionReference che risolve questo problema.

Weak references rfc

Le Weak references, o riferimenti deboli, sono riferimenti ad oggetti, che possono essere distrutti, per liberare memoria, con meno vincoli da parte del sistema.

#rfcmb_str_split aggiunta

Questa funzione offre le stesse funzionalità di str_split, ma su stringhe multi-byte.

Left-associative ternary operator deprecato

L’operatore ternario ha alcune stranezze in PHP. Questo RFC aggiunge un avviso di deprecazione per le dichiarazioni ternarie nidificate. In PHP 8, questa dichiarazione verrà convertita in un errore in fase di compilazione.

1 ? 2 : 3 ? 4 : 5;   // deprecated
(1 ? 2 : 3) ? 4 : 5; // ok

Exceptions consentite in __toString rfc

In precedenza, non era possibile inserire eccezioni __toString. Sono stati vietati a causa di una soluzione alternativa per alcuni vecchi meccanismi di gestione degli errori di base. Questo comportamento è ora cambiato e possono essere generate eccezioni __toString.

Precedenza nella concatenazione rfc

Se scrivessi qualcosa del genere:

echo "sum: " . $a + $b;

PHP lo avrebbe precedentemente interpretato in questo modo:

echo ("sum: " . $a) + $b;

PHP 8 lo farà in modo che sia interpretato in questo modo:

echo "sum :" . ($a + $b);

PHP 7.4 aggiunge un warning quando si incontra un’espressione non divisa che contiene un segno . prima di un +-.

#array_merge senza argomenti

Potrebbero esserci casi in cui vorresti utilizzare in questo modo array_merge:

$merged = array_merge(...$arrayOfArrays);

Per supportare il caso limite dove $arrayOfArrayssarebbe vuoto, entrambi array_mergearray_merge_recursive ora consentono un elenco di parametri vuoto. Verrà restituito un array vuoto se non è stato passato alcun argomento in input.

#Parentesi graffe per array e accesso a stringa rfc

È stato possibile accedere ad array e offset di stringa usando parentesi graffe:

$array{1};
$string{3};

Ora questo è stato deprecato.

Notifiche di accesso all’array non valide rfc

Se dovessi usare la sintassi di accesso dell’array su, diciamo, un numero intero; PHP, in precedenza, avrebbe restituito un valore null. A partire da PHP 7.4, verrà emesso un avviso.

$i = 1;
$i[0]; // Notice

proc_open miglioramenti aggiornamento

Sono state apportate modifiche in proc_open modo che possa eseguire programmi senza passare dalla shell. Questo viene fatto passando un array invece di una stringa per il comando.

strip_tags accetta anche l’array

Un tempo eri in grado di rimuovere più tag in questo modo:

strip_tags($string, '<a><p>')

PHP 7.4 consente anche l’uso di un array:

strip_tags($string, ['a', 'p'])

ext-hash sempre abilitato rfc

Questa estensione è ora permanentemente disponibile in tutte le installazioni di PHP.

PEAR non abilitato per default

Poiché PEAR non è più attivo, il team di sviluppo ha deciso di rimuovere la sua installazione predefinita da PHP 7.4.

#Diverse altre deprecazioni rfc

Questo RFC raggruppa molte funzionalità deprecate. Assicurati di leggere una spiegazione più dettagliata nella pagina RFC, anche se l’elenco di tutte le features deprecate e consultabile qui:

  • Il tipo real
  • Legacy citazioni magiche
  • array_key_exists() con oggetti
  • FILTER_SANITIZE_MAGIC_QUOTES filtro
  • export()Metodi di riflessione
  • mb_strrpos() con la codifica come terzo argomento
  • implode() mix ordine parametri
  • Non vincolante $thisda chiusure non statiche
  • hebrevc() funzione
  • convert_cyr_string() funzione
  • money_format() funzione
  • ezmlm_hash() funzione
  • restore_include_path() funzione
  • allow_url_include direttiva ini

# Altri aggiornamenti 

Dovresti sempre dare un’occhiata al documento UPGRADING completo quando aggiorni una versione di PHP.

Ecco alcune modifiche evidenziate:

  • Chiamare parent:: in una classe senza un genitore è deprecato.
  • La chiamata var_dump da un’istanza DateTimeDateTimeImmutable non lascerà più le proprietà accessibili sull’oggetto.
  • openssl_random_pseudo_bytes genererà un’eccezione in caso di errore.
  • Il tentativo di serializzare un’istanza a PDOPDOStatement genererà una Exception invece di una PDOException.
  • La chiamata get_object_vars() a un’istanza ArrayObject restituirà le proprietà dell’ArrayObject stesso e non i valori dell’array o dell’oggetto coinvolti. Si noti che i cast  (array) non sono interessati.
  • ext/wwdx è stato deprecato.

Seguimi su Twitter se vuoi rimanere aggiornato!

Fonte: https://stitcher.io/blog/new-in-php-74

Seguimi su

Antonio Lamorgese

Amministratore di rete, programmatore ed esperto di pratiche SEO. Dopo anni di esperienza nel settore, ho ideato un generatore di codice PHP Scopri di più su https://www.phpcodewizard.it.