PHP 8.2 RC1
mer, 07/09/2022 - 11:48
Le projet vient d'annoncer la disponibilité de PHP 8.2 en Release Candidate. Pour l'occasion l'équipe rappelle que PHP 8.2 RC reste une version de test qui ne doit pas être utilisée en production.
Cette mouture contient de nombreuses nouveautés. En voici quelques-unes :
Classes readonly
Les propriétés en lecture seule ont été introduites dans PHP 8.1. Les classes readonly s'appuient dessus et sont essentiellement un sucre syntaxique qui permet de rendre toutes les propriétés d'une classe en lecture seule en une seule fois. Au lieu de
class Post
{
public function __construct(
public readonly string $title,
public readonly Author $author,
public readonly string $body,
public readonly DateTime $publishedAt,
) {}
}
On écrira simplement :
readonly class Post
{
public function __construct(
public string $title,
public Author $author,
public string $body,
public DateTime $publishedAt,
) {}
}
Des classes abstraites et des classes finales peuvent également être déclarées readonly. L'ordre des mots clés ne fait aucune différence.
abstract readonly class Foo {}
final readonly class Bar {}
True devient un type autonome
PHP 8.2 permet l'utilisation true en tant que type, en tant que type autonome et dans le cadre d'un type Union.
Donc true peut être utilisé comme type partout où PHP accepte un type :
class Foo {
private true $processed;
public function process(string|int|true $value): true {
}
}
Le type true n'est pas coercitif. Lorsqu'un paramètre, une propriété ou un type de retour est déclaré comme true, PHP ne fait pas de coercition d'un autre type vers true.
Par exemple, l'appel de fonction suivant ne convertit pas la valeur entière 1 à true, et génère une erreur de type : TypeError:
function foo(true $value) {}
foo(1);
TypeError: foo(): Argument #1 ($value) must be of type true, int given, called in ... on line ... and defined in ...:...
Nouvelles fonctionnalité MySQLi
Dans PHP 8.2, l'extension MySQLi fournit une approche plus simple pour préparer, lier, exécuter et récupérer les résultats d'une requête SQL avec une nouvelle fonction mysqli_execute_query et une nouvelle méthode mysqli::execute_query.
Sans la fonction mysqli_execute_query, une requête paramétrée est exécutée avec beaucoup de code passe-partout comme ceci :
$query = 'SELECT uid, username FROM users WHERE uid = ?';
$statement = $connection->prepare($query);
$statement->bind_param('s', $uid);
$statement->execute();
$result = $statement->get_result();
Avec la fonction mysqli_execute_query le code est grandement simplifié.
$query = 'SELECT uid, username FROM users WHERE uid = ?';
$result = $mysqli->execute_query($sql, [$uid]);
Toutes les nouvelles fonctionnalités et changements de PHP 8.2 sont récapitulées dans ce billet.