recherche
  • Se connecter
  • S'inscrire
Réinitialisation du mot de passe réussie

Suivez les projets qui vous intéressent et découvrez les dernières actualités les concernant.

Plus de journal des modifications

Plus intelligent, plus rapide, conçu pour demain.

PHP 8.5 est une mise à jour majeure du langage PHP, Avec de nouvelles fonctionnalités, y compris l’extension URI, l’opérateur Pipe et le support de la modification des propriétés lors du clonage.

Mettez à niveau vers PHP 8.5 maintenant !

Extension URI

La nouvelle extension URI toujours disponible fournit des API pour analyser et modifier en toute sécurité les URI et URL conformément aux normes RFC 3986 et WHATWG URL.

Propulsé par les bibliothèques uriparser (RFC 3986) et Lexbor (WHATWG URL).

En savoir plus sur l’origine de cette fonctionnalité dans le blog de la PHP Foundation.

PHP < 8.5
$components = parse_url ( 'https://php.net/releases/8.5/en.php' );

var_dump ( $components [ 'host' ]);
// string(7) "php.net"
PHP 8.5
use Uri\Rfc3986\Uri ;

$uri = new Uri ( 'https://php.net/releases/8.5/en.php' );

var_dump ( $uri -> getHost ());
// string(7) "php.net"

Opérateur Pipe

L’opérateur pipe permet d’enchaîner les appels de fonctions sans se soucier des variables intermédiaires. Cela permet de remplacer de nombreux "appels imbriqués" par une chaîne lisible de l’avant vers l’arrière.

En savoir plus sur l’origine de cette fonctionnalité dans le blog de la PHP Foundation.

PHP < 8.5
$title = ' PHP 8.5 Released ' ;

$slug = strtolower (
str_replace ( '.' , '' ,
str_replace ( ' ' , '-' ,
trim ( $title )
)
)
);

var_dump ( $slug );
// string(15) "php-85-released"
PHP 8.5
$title = ' PHP 8.5 Released ' ;

$slug = $title
|> trim (...)
|> (fn( $str ) => str_replace ( ' ' , '-' , $str ))
|> (fn( $str ) => str_replace ( '.' , '' , $str ))
|> strtolower (...);

var_dump ( $slug );
// string(15) "php-85-released"

Clonage avec propriétés

Il est désormais possible de mettre à jour les propriétés lors du clonage d’un objet en passant un tableau associatif à la fonction clone(). Cela permet de prendre en charge facilement le modèle "with-er" pour les classes en lecture seule.

PHP < 8.5
readonly class Color
{
public function __construct (
public int $red ,
public int $green ,
public int $blue ,
public int $alpha = 255 ,
) {}

public function withAlpha ( int $alpha ): self
{
$values = get_object_vars ( $this );
$values [ 'alpha' ] = $alpha

; return new self (... $values );
}
}

$blue = new Color ( 79 , 91 , 147 );
$transparentBlue = $blue -> withAlpha ( 128 );
PHP 8.5
readonly class Color
{
public function __construct (
public int $red ,
public int $green ,
public int $blue ,
public int $alpha = 255 ,
) {}

public function withAlpha ( int $alpha ): self
{
return clone( $this , [
'alpha' => $alpha ,
]);
}
}

$blue = new Color ( 79 , 91 , 147 );
$transparentBlue = $blue -> withAlpha ( 128 );

#[\NoDiscard] Attribut

En ajoutant l’attribut #[\NoDiscard] à une fonction, PHP vérifiera si la valeur retournée est utilisée et émettra un avertissement si ce n’est pas le cas. Cela améliore la sécurité des API où la valeur retournée est importante, mais qu’il est facile d’oublier d’utiliser par accident.

Le cast associé (void) peut être utilisé pour indiquer qu’une valeur n’est pas utilisée intentionnellement.

PHP < 8.5
function getPhpVersion (): string
{
return 'PHP 8.4' ;
}

getPhpVersion (); // No warning
PHP 8.5
#[ \NoDiscard ]
function getPhpVersion (): string
{
return 'PHP 8.5' ;
}

getPhpVersion ();
// Warning: The return value of function getPhpVersion() should
// either be used or intentionally ignored by casting it as (void)

Closures et Callables de première classe dans les expressions constantes

Les closures statiques et les callables de première classe peuvent désormais être utilisés dans des expressions constantes. Cela inclut les paramètres d’attributs, les valeurs par défaut des propriétés et des paramètres, ainsi que les constantes.

PHP < 8.5
final class PostsController
{
#[ AccessControl (
new Expression ( 'request.user === post.getAuthor()' ),
)]
public function update (
Request $request ,
Post $post ,
): Response {
// ...
}
}
PHP 8.5
final class PostsController
{
#[ AccessControl (static function (
Request $request ,
Post $post ,
): bool {
return $request -> user === $post -> getAuthor ();
})]
public function update (
Request $request ,
Post $post ,
): Response {
// ...
}
}

Handles cURL persistants

Contrairement à curl_share_init(), les handles créés par curl_share_init_persistent() ne seront pas détruits à la fin de la requête PHP. Si un handle persistant avec le même ensemble d’options de partage est trouvé, il sera réutilisé, évitant le coût d’initialisation des handles cURL à chaque fois.

PHP < 8.5
$sh = curl_share_init ();
curl_share_setopt ( $sh , CURLSHOPT_SHARE , CURL_LOCK_DATA_DNS );
curl_share_setopt ( $sh , CURLSHOPT_SHARE , CURL_LOCK_DATA_CONNECT );

$ch = curl_init ( 'https://php.net/' );

curl_setopt ( $ch , CURLOPT_SHARE , $sh );

curl_exec ( $ch );
PHP 8.5
$sh = curl_share_init_persistent ([
CURL_LOCK_DATA_DNS ,
CURL_LOCK_DATA_CONNECT ,
]);

$ch = curl_init ( 'https://php.net/' );
curl_setopt ( $ch , CURLOPT_SHARE , $sh );

// This may now reuse the connection from an earlier SAPI request
curl_exec ( $ch );

Fonctions array_first() et array_last()

Les fonctions array_first() et array_last() retournent respectivement la première ou la dernière valeur d’un tableau. Si le tableau est vide, null est retourné (ce qui facilite l’utilisation avec l’opérateur ??).

PHP < 8.5
$lastEvent = $events === []
? null
: $events [ array_key_last ( $events )];
PHP 8.5
$lastEvent = array_last ( $events );

Fonctionnalités et améliorations supplémentaires

  • Les erreurs fatales (comme un temps d’exécution maximum dépassé) incluent désormais une trace.
  • Les attributs peuvent maintenant cibler les constantes.
  • L’attribut #[\Override] peut maintenant être appliqué aux propriétés.
  • L’attribut #[\Deprecated] peut être utilisé sur les traits et les constantes.
  • Les propriétés statiques prennent désormais en charge une visibilité asymétrique.
  • Les propriétés peuvent être marquées comme final grâce à la promotion de propriétés du constructeur.
  • Ajout de la méthode Closure::getCurrent() pour simplifier la récursion dans les fonctions anonymes.
  • Les fonctions setcookie() et setrawcookie() prennent désormais en charge la clé "partitioned".
  • Nouvelles fonctions get_error_handler() et get_exception_handler() disponibles.
  • Nouvelles méthodes Dom\Element::getElementsByClassName() et Dom\Element::insertAdjacentHTML() disponibles.
  • Ajout de la fonction grapheme_levenshtein().
  • Le nouvel attribut #[\DelayedTargetValidation] peut être utilisé pour supprimer les erreurs de compilation des attributs du cœur et des extensions utilisés sur des cibles invalides.

Dépréciations et ruptures de compatibilité ascendante

  • L’opérateur backtick en tant qu’alias pour shell_exec() est obsolète.
  • Les noms de conversion non-canoniques (boolean), (integer), (double) et (binary) sont obsolètes. Utilisez respectivement (bool), (int), (float) et (string).
  • Le paramètre INI disable_classes a été supprimé car il provoquait la rupture de diverses hypothèses du moteur.
  • Terminer les instructions case par un point-virgule au lieu d’un deux-points est obsolète.
  • Utiliser null comme index de tableau ou dans array_key_exists() est obsolète. Utilisez une chaîne vide à la place.
  • Il n’est plus possible d’utiliser "array" et "callable" comme alias de classe dans class_alias().
  • Les méthodes magiques __sleep() et __wakeup() sont déconseillées. Utilisez plutôt __serialize() et __unserialize().
  • Un avertissement est maintenant émis lors de la conversion de NAN vers d’autres types.
  • La déstructuration de valeurs non-tableau (autres que null) avec [] ou list() émet maintenant un avertissement.
  • Un avertissement est maintenant émis lors de la conversion de floats (ou chaînes ressemblant à des floats) en int si cela n’est pas possible.
De meilleures performances, une meilleure syntaxe, une sécurité de type améliorée. Mettez à niveau vers PHP 8.5 maintenant !

Pour les téléchargements de source de PHP 8.5, veuillez visiter le téléchargements page. Des binaires Windows peuvent être trouvés sur le PHP pour Windows site. La liste des modifications est enregistrée dans le Journal des modifications.

Le guide de migration est disponible dans le manuel PHP. Veuillez le consulter pour une liste détaillée de nouvelles fonctionnalités et des modifications incompatibles vers l'arrière.