PHP 8.1 : nouveautés et changement

Points forts du PHP 8.1
PHP 8.1 a amené avec elle des fonctionnalités telles que Enums, qui était l’une des
fonctionnalités les plus fréquentes et les plus attendues dans PHP. De plus, il ajoute les
Fibers, ce qui constitue un pas important vers les applications PHP simultanées, ce qui place
PHP au-delà du modèle traditionnel de demande-réponse.
Enums

Il est possible d’avoir des énumérations. Une énumération, ou une Enum en abrégé,
est un type énuméré qui a un nombre de valeurs possibles fixe
Une similitude populaire pour un Enum est les combinaisons dans un jeu de cartes à jouer.
Un jeu de cartes à jouer à quatre couleurs, et elles sont fixes : trèfle, carreau, cœur et pique.
En PHP, avec un Enum ces combinaisons peuvent être énumérées:
enum Suit {
case Clubs;
case Diamonds;
case coeur ;
case pique;
}
Avec Suit Enum, il est maintenant possible d’imposer des types du retour d’une valeur de
costume ou lors de l’acceptation:
function pick_card(Suit $suit) {}
pick_card(Suit::Clubs);
pick_card(Suit::Diamonds);
pick_card(Suit::coeur );
pick_card(Suit::pique);
A la différence de l’utilisation de chaînes ou de nombres spéciaux en interne (c’est-à-dire des
nombres magiques) pour stocker et utiliser des paramètres, les énumérations rendent le
code plus lisible et évitent les états d’application inattendus
Fibers

Fibers est une nouvelle autre des fonctionnalités apportée par PHP 8.1. Elle d’avoir une
simultanéité légère et contrôlée à PHP.
Essentiellement, Fiber est un bloc de code permettant de maintenir sa propre pile (variables
et état), qui peut être démarré, suspendu ou terminé de manière coopérative par le code
principal et la fibre.
Les Fibers sont similaires aux threads dans un programme. Planifiés par le système
d’exploitation, Les threads sont ne garantissent pas quand et à quel point les threads sont
suspendus et repris. Le programme lui-même peut créer, démarrer, suspendre et terminer
les Fibers, et permettent un contrôle précis de l’exécution du programme principal et de
l’exécution de la fibre.
Avec les Fibers, le bloc de code dans la fibre peut suspendre elle-même le bloc de code et
renvoyer toutes les données au programme principal. Le programme principal peut aussi
reprendre la Fibers à partir du point où il a été suspendu.
Il est important que l’exécution simultanée ne signifie pas l’exécution simultanée. La Fibers
en elle-même ne permet pas l’exécution simultanée de plusieurs Fibers ou du thread
principal et d’une Fibers. Cependant, c’est un moyen pour les frameworks PHP concurrents
pour gérer efficacement leur pile d’exécution et permettre une exécution simultanée.
Read-only Properties
PHP 8.1 prend en charge la propriété de classe read-only disons lecture seule. Un classe
déclare avec la propreté read-only permet seulement à initialiser une fois, et d’autres
modifications de la propriété ne seront pas possible.
La propreté Read-only sont déclarées avec le mot clé contextuel en lecture seule dans une
propriété typée.
class User {
public readonly int $uid;
public function __construct(int $uid) {
$this->uid = $uid;
}
}
Avec une propriété en Read-only, écraser la propriété ou y écrire depuis l’extérieur de la
classe entraîne une exception.
$user = new User(42);
$user->uid = 16; // Not allowed.
Type System Improvements
PHP 8.1 continue de fournir une syntaxe et des fonctionnalités pour écrire des applications
plus défensives et typées. Cela peut également signifier que PHP 8.1 ajoutera de nouveaux
avis d’obsolescence lorsque les applications héritées contiennent des signatures
incompatibles pour les classes, ou parfois le manque de types lors de l’extension des
classes PHP intégrées.
Intersection Types
PHP 8.1 prend en charge les types d’intersection, ce qui permet de déclarer un type pour un
paramètre, une propriété ou des types de retour et d’imposer que les valeurs appartiennent à
tous les types de classe/interface déclarés. Qui est une opposition de Union Types, qui
autorise n’importe lequel des types déclarés. L’implémentation des types d’intersection dans
PHP 8.1 est appelée types d’intersection « purs » car la combinaison de types d’union et de
types d’intersection dans la même déclaration n’est pas autorisée.
Les types d’intersection sont déclarés en combinant les noms de classe/interface avec un
signe &.
Pour un exemple de cas d’utilisation, considérons les interfaces Iterator et Countable
intégrées de PHP. L’interface Iterator permet d’altérer l’objet de classe à l’aide de foreach.
Bien entendu, à moins que la même classe n’implémente l’interface Countable, il n’est pas
possible d’appeler la fonction count() sur de tels objets.
Avec un type d’intersection, il est désormais possible de vérifier le type des objets de classe
pour implémenter à la fois les interfaces Iterator et Countable
function count_and_iterate(Iterator&\Countable $value) {
foreach($value as $val) {}
count($value);
}
Dans l’extrait ci-dessus, le paramètre $value doit être un objet de la classe qui implémente à
la fois les interfaces Iterator et Countable. Le passage de toute autre valeur déclenche une
erreur de type.
Never Return Type
never return type est elle au une autre nouveauté de PHP 8.1.
Une fonction/méthode déclarée de type Never return voudra indiquer qu’elle ne retournera
jamais de valeur et lève toujours une exception ou se termine par un appel die/exit.
Le type never de retour est similaire au type de retour Void existant, mais le type never
garantit que le programme se terminera ou se lancera. C’est-à-dire, une fonction ou une
méthode déclarée avec never ne doit pas du tout appeler return, même pas dans le return ;
former.
function redirect(string $url): never {
header(‘Location: ‘ . $url);
exit();
}
migration de ressource vers objet
PHP 8.1 poursuit s’efforce pour migrer les types de ressources hérités vers des classes
standard.
En PHP 8.1, les modifications qui suives sont apportées :
finfo Extension: file_info resource are migrated to existing finfo objects c’est à dire que les
ressources file_info sont migrées vers des objets finfo existants
IMAP: imap resources are IMAP\Connection class objects
FTP Extension: Les ressources de connexion sont des objets de la classe FTP\Connection
GD Extension: GD Extension: Font identifiers are GdFont class objects.
LDAP: vers les objets LDAP\Connection, LDAP\Result et LDAP\ResultEntry.
PostgreSQL: Pspell : les ressources de configuration pspell, pspell sont des objets des
classe PSpell\Dictionary, PSpell\Config
pspell, les ressources de configuration pspell sont des objets de classe PSpell\Dictionary,
PSpell\Config nouveaux algorithmes de hachage.
PHP 8.1 ajoute la prise en charge des algorithmes de hachage Hash et MurMure Hash 3. Ils
sont parmi les algorithmes de hashing les plus rapides , et peuvent facilement hacher
(mâcher) des données presque à la vitesse d'un support de stockage. Désormais PHP est le
premier langage de programmation à inclure ces deux algorithmes de hachage dans sa
bibliothèque standard.
Quelques liens utiles :
- Des offres d’hébergement web avec le logiciel de gestion cPanel
- L’hébergement optimisé avec WordPress
- La location de serveurs VPS très puissant et hautement disponible.