Nouvelles fonctionnalités
Type nullable
La déclaration des types de paramètre et de valeur de retour peuvent désormais
être marqués en tant que nullable en préfixant le nom du type avec un point d'interrogation.
Ceci signifie que le type spécifié aussi bien que NULL
peuvent être passés comme argument,
ou retournés en tant que valeur, respectivement.
<?php
function testReturn(): ?string
{
return 'elePHPant';
}
var_dump(testReturn());
function testReturn(): ?string
{
return null;
}
var_dump(testReturn());
function test(?string $name)
{
var_dump($name);
}
test('elePHPant');
test(null);
test();
L'exemple ci-dessus va afficher :
string(10) "elePHPant" NULL string(10) "elePHPant" NULL Uncaught Error: Too few arguments to function test(), 0 passed in...
Fonctions Void
Le type de retour void à été introduit. Fonction déclaré avec void
en tant que leur type de retour doivent soit ommettre la déclaration de retour
entièrement, ou utiliser une déclaration de retour vide.
NULL
n'est pas un type de retour valide pour une fonction void.
<?php
function swap(&$left, &$right): void
{
if ($left === $right) {
return;
}
$tmp = $left;
$left = $right;
$right = $tmp;
}
$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);
L'exemple ci-dessus va afficher :
null int(2) int(1)
Essayer d'utiliser la valeur de retour d'une fonction void évalue simplement
à NULL
, sans avertissement émit. La raison pour ceci est qu'un avertissement
impliquerait l'usage de fonction générique d'ordre supérieur.
Déconstruction symétrique de tableau
L'abréviation de la syntaxe array [] peut désormais être utilisée pour déconstruire des tableaux pour des affectations (y compris au sein de foreach), à la place de la syntaxe existante list(), qui est toujours supporté.
<?php
$data = [
[1, 'Tom'],
[2, 'Fred'],
];
// list() style
list($id1, $name1) = $data[0];
// [] style
[$id1, $name1] = $data[0];
// list() style
foreach ($data as list($id, $name)) {
// logic here with $id and $name
}
// [] style
foreach ($data as [$id, $name]) {
// logic here with $id and $name
}
Visbilité des constantes de classes
Le support pour spécifier la visbilité des constantes de classes a été ajouté.
<?php
class ConstDemo
{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}
Le pseudo-type iterable
Un nouveau pseudo-type (similaire à callable) appellé iterable a été introduit. Il peut être utilisé aves les paramètres et retour typés, où il accepte soit des tableau soit des objets qui implémentent l'interface Traversable. En ce qui concerne le sous-typage, les types de paramètres des classes enfant peuvent élargir une déclaration d'un parent de array ou Traversable en iterable. Avec les types de retour, les classes enfant peuvent restreindre le type de retour iterable du parent en array ou un objet qui implémente Traversable.
<?php
function iterator(iterable $iter)
{
foreach ($iter as $val) {
//
}
}
Gestion du catch de plusieurs exceptions
Plusieurs exceptions par bloc catch peuvent désormais être spécifié en utilisant le charactère barre verticale (|). Ceci est utile quand différentes exception sont gérées de façon identique.
<?php
try {
// du code
} catch (FirstException | SecondException $e) {
// gère les exceptions first et second
}
Support des clés dans list()
Il est désormais possible de spécifier des clés dans list(), ou sa nouvelle syntaxe abréviée []. Ceci permet la déconstruction des tableaux qui ont des clés non entières ou non séquentielles.
<?php
$data = [
["id" => 1, "name" => 'Tom'],
["id" => 2, "name" => 'Fred'],
];
// list() style
list("id" => $id1, "name" => $name1) = $data[0];
// [] style
["id" => $id1, "name" => $name1] = $data[0];
// list() style
foreach ($data as list("id" => $id, "name" => $name)) {
// logique ici avec $id et $name
}
// [] style
foreach ($data as ["id" => $id, "name" => $name]) {
// logique ici avec $id et $name
}
Support pour les positions négatives des chaîne de caractères
Support pour les positions négatives des chaîne de caractères a été ajouté aux fonctions de manipulation de chaîne de caractères qui accepte une position, ainsi qu'a l'indexation de chaîne de caractères avec [] ou {}. Dans de tel cas, une position négative est interprété comme une position en partant de la fin de la chaîne de caractères.
<?php
var_dump("abcdef"[-2]);
var_dump(strpos("aabbcc", "b", -3));
L'exemple ci-dessus va afficher :
string (1) "e" int(3)
Les positions négative des chaîne de caractères et tableaux sont aussi supportées avec la syntaxe simple d'analyse dans les chaîne de caractères.
<?php
$string = 'bar';
echo "Le dernier charactère de '$string' est '$string[-1]'.\n";
?>
L'exemple ci-dessus va afficher :
Le dernier charactère de 'bar' est 'r'.
Support pour AEAD dans ext/openssl
Support pour AEAD (modes GCM et CCM) a été ajouté en étendant les fonctions openssl_encrypt() et openssl_decrypt() avec des paramètres additionels.
Convertir des callables en Closures avec Closure::fromCallable()
Une nouvelle méthode statique a été indroduite à la classe Closure pour permettre des callables d'être facilement convertit en objet Closure.
<?php
class Test
{
public function exposeFunction()
{
return Closure::fromCallable([$this, 'privateFunction']);
}
private function privateFunction($param)
{
var_dump($param);
}
}
$privFunc = (new Test)->exposeFunction();
$privFunc('some value');
L'exemple ci-dessus va afficher :
string(10) "some value"
Gestion des signaux asynchrones
Une nouvelle fonction appellé pcntl_async_signals() a été introduite pour permettre la gestion des signaux asynchrones sans utiliser les ticks (ce qui introduisait beaucoup de surcoût).
<?php
pcntl_async_signals(true); // activer les signaux asynchrones
pcntl_signal(SIGHUP, function($sig) {
echo "SIGHUP\n";
});
posix_kill(posix_getpid(), SIGHUP);
L'exemple ci-dessus va afficher :
SIGHUP
Support des push serveur HTTP/2 dans ext/curl
Suport pour les push serveur a été ajouté à l'extension CURL (nécessite
la version 7.46 ou ultérieur). Ceci peut être exploité à travers la
fonction curl_multi_setopt() avec la nouvelle
constante CURLMOPT_PUSHFUNCTION
. Les constantes
CURL_PUSH_OK
et CURL_PUSH_DENY
ont aussi été ajouté pour que l'exécution de la fonction de rappel du
push serveur peuvent être approuvé ou refusé.
Options du Contexte de Flux (Stream Context Options)
L'option du contexte de flux tcp_nodelay a été ajouté.
Version en cache
22/12/2024 18:54:48 Cette version de la page est en cache (à la date du 22/12/2024 18:54:48) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-migration71.new-features.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.