PHP 8.1.31 Released!

Nouvelles fonctionnalités

Type nullable

La déclaration des types de paramètre et de valeur de retour peut désormais être marquée 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 a été introduit. Les fonctions déclarées avec un type de retour void doivent soit omettre la déclaration de retour entièrement, soit 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ée.

<?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
}

Visibilité des constantes de classes

Le support pour spécifier la visibilité 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é avec les paramètres et retours 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ées en utilisant le caractère barre verticale (|). Ceci est utile quand différentes exceptions 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égé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

Le support des positions négatives des chaîne de caractères a été ajouté aux fonctions de manipulation de chaîne de caractères qui acceptent une position, ainsi qu'à l'indexation de chaîne de caractères avec [] ou {}. Dans de tels cas, une position négative est interprétée 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égatives 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 caractère de '$string' est '$string[-1]'.\n";
?>

L'exemple ci-dessus va afficher :

Le dernier caractè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 additionnels.

Convertir des callables en Closures avec Closure::fromCallable()

Une nouvelle méthode statique a été introduite dans la classe Closure pour permettre des callables d'être facilement convertit en objets 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ée 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

Le support pour les push serveur a été ajouté à l'extension CURL (nécessite la version 7.46 ou ultérieure). 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ées pour que l'exécution de la fonction de rappel du push serveur puisse être approuvée ou refusée.

Options du contexte de flux (Stream Context Options)

L'option du contexte de flux tcp_nodelay a été ajoutée.

add a note

User Contributed Notes 2 notes

up
75
DYM
6 years ago
<?php
function swap( &$a, &$b ): void
{ [ $a, $b ] = [ $b, $a ]; }
?>
up
26
unti1x
6 years ago
Note that declaring nullable return type does not mean that you can skip return statement at all. For example:

php > function a(): ?string { }
php > a();
PHP Warning: Uncaught TypeError: Return value of a() must be of the type string or null, none returned in php shell code:2

php > function b(): ?string { return; }
PHP Fatal error: A function with return type must return a value (did you mean "return null;" instead of "return;"?) in php shell code on line 2
To Top