PHP est un langage de script utilisé par un grand nombre d'utilisateurs à des fins de développement Web. La dernière version stable et mise à jour de PHP, 8.3, a été publiée le 23.11.2023. De nombreuses innovations et changements ont eu lieu depuis PHP 3.x, sorti en 2000. PHP fait toujours partie des langages de développement Web (conception de sites Web) les plus populaires et utilisés par un très large public. Dans cet article, nous examinerons et analyserons les innovations et les changements de PHP 8.3 avec des exemples de code.
PHP 8.3 Nouvelles fonctionnalités et améliorations majeures
Il existe de nombreuses innovations et améliorations majeures dans PHP 8.3 par rapport à la version précédente de PHP, PHP 8.2. Dans le même temps, certaines fonctionnalités sont devenues obsolètes. Nous allons maintenant examiner les innovations et améliorations une par une avec des exemples de code.
Constantes de classe typées
La déclaration de type est une fonctionnalité très importante pour les développeurs qui augmente la stabilité et réduit les taux d'erreur dans le développement Web. La fonctionnalité de déclaration de type pour les propriétés d'une classe a été ajoutée dans PHP 7.4. Bien que de nombreuses améliorations aient été apportées à cette fonctionnalité dans les versions ultérieures, cette fonctionnalité n'était toujours pas disponible pour les constantes de la classe. Avec PHP 8.3, il est désormais possible de déclarer des types pour les constantes des classes.
// Doğru kullanım:
class MyClass {
// Bildirilen tür ve değer aynı
const string VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür ile değer farklı
const int VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür sınıf sabitleri için desteklenmiyor
const void VERSION = "PHP 8.3"; // değer string
}Certaines déclarations de type ne sont pas prises en charge pour les constantes de classe.
Déclarations de type non prises en charge pour les constantes de classe : void, callable, never
Une nouvelle fonction : json_validate()
Lorsque nous travaillons avec des données au format JSON (données codées en json), nous devons vérifier que les données entrantes sont valides avant de les utiliser. Nous faisions cela dans les versions antérieures à PHP 8.3 en utilisant les méthodes suivantes ou similaires.
// PHP 8.3'ten önceki sürümlerde JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_last_error() === JSON_ERROR_NONE) {
// $data ile gerçekleştirilecek işlemler
}Dans cet ancien exemple, lors de la validation des données JSON, PHP peut consommer une mémoire importante, en fonction de la taille des données. Dans PHP 8.3, une nouvelle fonction PHP a été ajoutée pour créer une solution rapide orientée performances : json_validate(). Nous avons illustré ci-dessous le scénario d'utilisation de cette fonction.
// PHP 8.3'te JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_validate($maybeJSON)) {
// $data ile gerçekleştirilecek işlemler
}Une nouvelle fonctionnalité : #[Override]
Lors de l'implémentation d'interfaces en PHP, nous fournissons des fonctionnalités détaillées pour les méthodes de l'interface. Lors de la création d'une instance d'une classe, nous pouvons remplacer une méthode parent en créant une version alternative avec le même nom et une signature compatible. Cela peut entraîner des problèmes majeurs dans le logiciel. En bref, le problème est que nous pensons avoir remplacé la méthode main à la suite d'une petite faute de frappe oubliée.
La fonctionnalité PHP 8.3 #[Override] fournit une solution à ce problème. Voyons maintenant cela dans l'exemple.
class A {
protected function myOverrideFunc(): void {}
// Doğru kullanım
// Bu örnek çalışacak
// Üstteki sınıfta ilgili method var ve geçersiz kılındı
class B extends A {
#[\Override]
public function myOverrideFunc(): void {}
// Hatalı kullanım
// Bu örnek çalışmayacak, çünkü ana sınıfta method yok
// Muhtemelen gözden kaçan bir yazım hatası
class C extends A {
#[\Override]
public function myOverrideFunction(): void {}
}Clonage profond des propriétés en lecture seule
PHP a introduit la possibilité de déclarer des propriétés de classe individuelles en lecture seule dans PHP 8.1 et de les attribuer à la classe entière dans PHP 8.2. Cependant, la plupart des développeurs Web pensaient que les limitations imposées lorsqu’on travaillait avec des classes contenant de telles fonctionnalités empêchaient l’aspect pratique de la logique de programmation.
Pour changer cela RFC Deux recommandations principales ont été formulées :
lecture seule
readonlyautoriser la prolongation des cours qui ne sont pas autorisésreadonlypermettre le redémarrage des fonctionnalités pendant le clonage
La deuxième suggestion a été incluse dans PHP 8.3. Cette nouvelle approche ajoutée à PHP 8.3 readonly instances d'une classe avec des propriétésreadonly propriétés) __clone Il permet de le relancer avec sa méthode magique.
Cet exemple de code de la RFC peut nous aider à comprendre comment fonctionne cette nouvelle méthode :
Récupération dynamique des constantes de classe et des membres Enum
Contrairement à d'autres fonctionnalités de PHP, la capture des constantes de classe et des membres d'énumération avec des noms de variables est un peu plus compliquée. Avant PHP 8.3, nous pouvions faire cela comme dans l'exemple ci-dessous :
class Foo {
public function __construct(
public readonly DateTime $bar,
public readonly DateTime $baz
) {}
public function __clone() {
// Klon çağrıldığında $bar yeni bir DateTime alacak
$this->bar = clone $this->bar;
// Ardından bu metod çağrılacak
$this->cloneBaz();
}
private function cloneBaz() {
// Bu __clone içinden çağrıldığından dolayı doğru bir kullanımdır
unset($this->baz);
}
}
$foo = new Foo(new DateTime(), new DateTime());
$foo2 = clone $foo;class MyClass {
public const THE_CONST = 9;
}
enum MyEnum: int {
case FirstMember = 9;
case SecondMember = 10;
}
$constantName = 'THE_CONST';
$memberName = 'FirstMember';
echo constant('MyClass::' . $constantName);
echo constant('MyEnum::' . #memberName)->value;Maintenant, récupérons les valeurs en utilisant les définitions de classe et d'énumération dans l'exemple ci-dessus en PHP 8.3 :
$constantName = 'THE_CONST';
$memberName = 'FirstNumber';
echo MyClass::{$constantName};
echo MyEnum::{$memberName}->value;Une nouvelle méthode : getBytesFromString()
On peut dire que cette méthode était la plus inattendue parmi les fonctionnalités ajoutées dans PHP 8.3 : Générer du texte aléatoire à l'aide d'une collection de caractères pré-approuvée.
Cette nouvelle méthode est très simple et claire. Nous donnons quelques caractères à la méthode comme ressources et spécifions combien d'entre eux nous voulons utiliser. C'est tout ! Notre méthode renverra désormais des résultats avec des caractères aléatoires jusqu'à ce qu'elle atteigne la longueur spécifiée. Maintenant, clarifions cela avec un exemple
$generateRandomString = new Random\Randomizer();
$allowedChars = 'ABCDEFGHJKMNPQRSTVWXYZ';
$generateRandomString->getBytesFromString($allowedChars, 6) // "MBDSFD" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 6) // "DJSDKA" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 4) // "SDLA" - rastgele gelen veriIl est possible que la sortie soit plus longue que la longueur totale des caractères que nous avons spécifiés. Nous l'avons fait dans l'exemple ci-dessous :
$generateRandomString = new Random\Randomizer();
$allowedChars = '123456';
$generateRandomString->getBytesFromString($allowedChars, 8) // "47384252" - rastgele gelen veriSi tous les caractères que nous donnons en paramètres sont différents, la probabilité que celui-ci soit sélectionné est égale. Cependant, nous pouvons faire apparaître plusieurs caractères identiques dans la sortie en ajoutant plusieurs caractères identiques à notre liste de caractères pris en charge. Nous l’avons montré dans l’exemple suivant.
$generateRandomString = new Random\Randomizer();
$allowedChars = 'AAAAA12345';
$generateRandomString->getBytesFromString($allowedChars, 5) // "4AA12" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 8) // "38A19AA5" - rastgele gelen veriNouvelles méthodes : getFloat() et nextFloat()
Dans cette innovation, PHP 8.3 introduit deux nouvelles méthodes qui étendent l'extension aléatoire de PHP : getFloat() et nextFloat().
Un exemple de ces méthodes :
$generateRandomNumber = new Random\Randomizer();
// Rastgele ondalıklı (float) bir rakam oluştur
// Değer 0 ile 5 arasında olsun
$generateRandomNumber->getFloat(0,5); // 2.483929 - rastgele gelen veri
// 0 ile 1 arasında rastgele ondalıklı bir rakam oluştur
$generateRandomNumber->nextFloat(); // 0.4828258 rastgele gelen veriInnovations et améliorations mineures dans PHP 8.3
En plus des innovations ci-dessus, PHP 8.3 propose des dizaines d'autres améliorations et innovations à petite échelle. Nous les avons répertoriés avec leurs documents sources dans la liste ci-dessous.
- Nouvelles méthodes pour la classe DOMElement :
DOMElement::getAttributeNames(),DOMElement::insertAdjacentElement(),DOMElement::insertAdjacentText(),DOMElement::toggleAttribute(),DOMNode::contains(),DOMNode::getRootNode(),DOMNode::isEqualNode()DOMNameSpaceNode :: contient () etMParentNode::replaceChildren(). - Nouvelles méthodes pour la classe IntlCalendar :
IntlCalendar::setDate(),IntlCalendar::setDateTime(),IntlGregorianCalendar::createFromDate()etIntlGregorianCalendar::createFromDateTime(). - Nouvelles fonctions LDAP : ldap_connect_wallet() et ldap_exop_sync().
- nouveau
mb_str_pad()fonction de chaîne multi-octets (fonction de chaîne multi-octets). - Nouvelles fonctions POSIX :
posix_sysconf(),posix_pathconf(),posix_fpathconf()etposix_eaccess(). - Nouvelle méthode :
ReflectionMethod::createFromMethodName() - Nouvelle fonction de prise :
socket_atmark(). - Nouvelles fonctions de chaîne (texte) :
str_increment(),str_decrement(), etstream_context_set_options(). - Nouvelle méthode de classe ZipArchive :
ZipArchive::getArchiveFlag(). - Nouveau paramètre php.ini pour définir la taille maximale autorisée de la pile :
zend.max_allowed_stack_size.
Obsolète dans PHP 8.3
Avec chaque nouvelle version de PHP, certains codes sont marqués comme obsolètes. Il n’est jamais recommandé d’utiliser ces fonctionnalités une fois qu’elles sont complètement obsolètes. Si du code obsolète est utilisé, un message d’erreur sera renvoyé lors de l’exécution du code.
Liste des dépréciations dans PHP 8.3 :
- La constante U_MULTIPLE_DECIMAL_SEPARATORS est obsolète.
- Mt19937
3MT_RAND_PHPLa variante est obsolète. ReflectionClass::getStaticProperties()ne peut plus être nullable.- Paramètres PHP.ini
assert.active,assert.bail,assert.callback,assert.exceptionetassert.warninga été obsolète. get_class()etget_parent_class()a été obsolète.
PHP8.3
Dans cet article, nous avons passé en revue les changements et innovations importants de PHP 8.3. Pour une liste plus détaillée de toutes les modifications apportées à PHP 8.3 journal des modifications officiel Nous vous recommandons de le consulter. Si vous souhaitez mettre à jour vos codes ou votre site de PHP 8.2 vers PHP 8.3, ce guide peut être utile : Guide de migration PHP 8.3 -> https://www.php.net/manual/en/migration83.php
Si vous êtes préoccupé par les versions et la migration de PHP, nous vous recommandons de laisser à la nouvelle version le temps de passer à PHP 8.3.
Couverture complète des langages PHP et JavaScript et des technologies associées comme Onur Özden Web Çözümleri Logiciel Web Nous offrons des services. Si vous avez une question ou une demande, vous pouvez nous contacter rapidement via le bouton Whatsapp en bas à gauche pour obtenir un devis.



