PHP 7.4 è stato rilasciato il 28 novembre 2019. In questo post troverai un elenco di tutte le novità.
di Antonio Lamorgese
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:
- Array Function per funzioni più pulite e snelle
- Preloading per migliorare le prestazioni
- Typed Properties nelle classi
- Type Variance migliorata
- L’ operatore di assegnazione a coalescenza nulla
- FFI per un migliore sviluppo delle estensioni in PHP
- Gli underscore, i trattini bassi, possono essere usati per formattare valori numerici
- Operatori negli array
- E altro ancora, ma puoi leggerlo qui
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'] ??
newDateTime
();
Ora puoi fare:
$data[
'date'] ??=
newDateTime
();
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
e __unserialize
. La differenza tra questi metodi oltre a __sleep
e __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 +
o -
.
#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 $arrayOfArrays
sarebbe vuoto, entrambi array_merge
e array_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 oggettiFILTER_SANITIZE_MAGIC_QUOTES
filtroexport()
Metodi di riflessionemb_strrpos()
con la codifica come terzo argomentoimplode()
mix ordine parametri- Non vincolante
$this
da chiusure non statiche hebrevc()
funzioneconvert_cyr_string()
funzionemoney_format()
funzioneezmlm_hash()
funzionerestore_include_path()
funzioneallow_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’istanzaDateTime
oDateTimeImmutable
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
PDO
oPDOStatement
genererà unaException
invece di unaPDOException
. - La chiamata
get_object_vars()
a un’istanzaArrayObject
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!