- Fonctionnalités
- Pricing
Quelques jours seulement après sa sortie officielle, nous sommes ravis d'annoncer la disponibilité immédiate de PHP 8.1 pour tous les projets du forfait Grid. La nouvelle fondation PHP publie une nouvelle version majeure chaque année à la toute fin du mois de novembre, et c'est en quelque sorte un Noël avant l'heure pour nous, développeurs et créateurs d'applications.
PHP 8.1 apporte de nombreuses fonctionnalités nouvelles et attendues depuis longtemps, telles que les énumérations, les propriétés en lecture seule, la syntaxe callable de premier ordre et new dans les initialiseurs.
Il apporte également de belles améliorations de performances, estimées entre 5 et 8 %. Dmitry Stogov, l’auteur de cette fonctionnalité impressionnante, la décrit comme une nouvelle technologie transparente qui élimine la surcharge liée à l’héritage de classes PHP.
Enfin, les Fibers pourraient bien constituer un changement révolutionnaire dans l’écosystème PHP en ajoutant un mécanisme de bas niveau pour gérer le parallélisme.
Ces fonctionnalités et bien d’autres sont désormais disponibles. Et tu peux les essayer dès aujourd’hui.
C'est une fonctionnalité que j'attendais depuis des années, et j'ai hâte de l'utiliser car c'est un moyen très pratique de gérer des collections de valeurs constantes.
enum Status {
case Draft;
case Published;
case Archived;
}Copie l'extrait
class Post
{
public function __construct(
private Status $status = Status::Draft;
// ...
) {}
public function getStatus(): Status
{
return $this->status;
}
public function setStatus(Status $status): void
{
$this->status = $status;
}
}
$post->setStatus(Status::Active);Copier l'extrait
Les énumérations peuvent même avoir des méthodes et des interfaces. C'est génial, non ?
enum Status
{
// …
public function color(): string
{
return match($this)
{
self::Draft => 'grey',
self::Published => 'green',
self::Archived => 'red',
};
}
}Copier l'extrait
interface HasColor
{
public function color(): string;
}
Copier l'extrait
enum Status implements HasColor
{
// ...
public function color(): string { /* … */ }
}
Copier l'extrait
Les propriétés de classe peuvent être marquées comme en lecture seule. Ça veut dire qu'elles ne peuvent être écrites qu'une seule fois, et une exception sera levée dans le cas contraire.
class Post {
public function __construct(
public readonly string $title,
...
) {}
}Copier l'extrait
$post = new Post(title: ‘PHP 8.1 is available’, /* … */);
// All good, life is great.
$post->title = 'Some other and less fancy title';
// Error: Cannot modify readonly property Post::$titleCopier l'extrait
PHP 8.1 introduit une nouvelle syntaxe pour créer un callable. Tu peux désormais créer une fermeture à partir d'un callable en appelant ce callable et en lui passant ... en tant qu'argument :
function love(Human $a, Human $b) {
/* What is love … */
}
$love = love(...);
$love(a: $someone, b: $someoneElse);Copier l'extrait
Ces fonctionnalités permettent une utilisation plus large du new mot-clé, qui peut désormais être utilisé dans les définitions de fonctions en tant que paramètre par défaut et arguments d'attributs.
Associée à la promotion des propriétés du constructeur introduite avec PHP 8.0, cela peut réduire considérablement la taille des classes. Moins de bruit et plus de signal : plus d'espace pour les développeurs zen.
class FooController {
public function __construct(
private Logger $logger = new BarLogger(),
) {}
}Copier l'extrait
Les fibres sont un nouveau mécanisme de bas niveau destiné à faciliter la concurrence. Elles permettent la création de fonctions « full-stack » et interruptibles pouvant être utilisées pour implémenter le multitâche coopératif en PHP. Elles sont également décrites comme des « green threads », car elles exécutent du code en parallèle sans s’appuyer sur un environnement multithread.
$catFiber = new Fiber(function (): void {
// …
$value = Fiber::suspend('taking a nap');
echo ‘Cat fiber resuming its activity because of: ‘ . $value;
});
$value = $catFiber->start();
echo ‘Current value from this cat fiber: ‘ . $value;
// Current value from cat fiber suspending: taking a nap
$catFiber->resume(‘some random noise’);
// Cat fiber resuming its activity because of: some random noiseCopier l'extrait
Même s’il ne s’agit pas véritablement de fonctionnalités asynchrones ou multithread, les Fibers pourraient tout de même ouvrir de nouvelles perspectives pour l’écosystème PHP, car elles marquent un tournant dans les paradigmes historiques de PHP. Découvre-en plus sur les Fibers avec le RFC.
PHP 8.1 introduit effectivement des changements majeurs susceptibles d’affecter les anciens codes. Tu voudras peut-être tester ton application avant de mettre à jour la version de PHP. Bonne nouvelle : tester PHP 8.1 ne pourrait pas être plus simple. Commence par créer une nouvelle branche dans ton dépôt. Ensuite, mets à jour ton ./.upsun/config.yaml fichier dans cette branche et remplace la clé type par :
type: php:8.1Copie l'extrait
Commit Git et déploie : cette branche fonctionne désormais sous PHP 8.1. Teste ton application, exécute tes tests d'intégration et vérifie si des mises à jour sont nécessaires. Une fois les modifications apportées, fusionne cette branche avec ta branche principale. Félicitations, tu utilises désormais PHP 8.1 en production.
Bon déploiement, PHP !