PHP 8.4.1 Released!

Fonctionnalités obsolètes

PHP Core

  • Si un paramètre avec une valeur par défaut est suivi d'un paramètre obligatoire, la valeur par défaut n'a pas d'effet. Ceci est obsolète à partir de PHP 8.0.0 et peut généralement être résolu en supprimant la valeur par défaut du paramètre, sans changer la fonctionnalité.

    <?php
    function test($a = [], $b) {} // Avant
    function test($a, $b) {} // Après
    ?>

    Une exception à cette règle sont les paramètres de la forme Type $param = null, où la valeur par défaut null rend le type implicitement nullable. Cette utilisation reste autorisée, mais il est recommandé d'utiliser un type explicitement nullable :

    <?php
    function test(A $a = null, $b) {} // Toujours autorisé
    function test(?A $a, $b) {} // Recommandé
    ?>

  • Appeler get_defined_functions() avec exclude_disabled explicitement à false est obsolète et n'a plus d'effet. get_defined_functions() n'inclura jamais les fonctions désactivées.

Enchant

LibXML

libxml_disable_entity_loader() est maintenant obsolète. Comme libxml 2.9.0 est désormais requis, le chargement d'entités externes est garanti d'être désactivé par défaut, et cette fonction n'est plus nécessaire pour se protéger contre les attaques XXE, à moins d'utiliser la constante (toujours vulnérable) LIBXML_NOENT. Dans ce cas, il est recommandé de refactoriser le code en utilisant libxml_set_external_entity_loader() pour supprimer le chargement des entités externes.

PGSQL / PDO PGSQL

Bibliothèque standard

  • Les fonctions de comparaison de tri qui retournent true ou false lèveront désormais un avertissement d'obsolescence, et doivent être remplacées par une implémentation qui retourne un entier inférieur, égal ou supérieur à zéro.

    <?php
    // Remplacer
    usort($array, fn($a, $b) => $a > $b);
    // Par
    usort($array, fn($a, $b) => $a <=> $b);
    ?>

Zip

  • L'utilisation d'un fichier vide en tant que ZipArchive est obsolète. Libzip 1.6.0 n'accepte plus les fichiers vides comme des archives zip valides. La solution de contournement existante sera supprimée dans la prochaine version.

  • L'API procédurale de Zip est obsolète. Utilisez plutôt ZipArchive. L'itération sur toutes les entrées peut être réalisée en utilisant ZipArchive::statIndex() et une boucle for:

    <?php
    // itère à l'aide de l'API procédurale
    assert(is_resource($zip));
    while (
    $entry = zip_read($zip)) {
    echo
    zip_entry_name($entry);
    }

    // itère à l'aide de l'API orientée objet
    assert($zip instanceof ZipArchive);
    for (
    $i = 0; $entry = $zip->statIndex($i); $i++) {
    echo
    $entry['name'];
    }
    ?>

Reflection

add a note

User Contributed Notes 1 note

up
6
dominique dot vienne at ik dot me
3 years ago
If you try to get all methods / functions assigning an optional argument before a mandatory one, try this regex (single line)

<?php
function\s
+[a-z][a-zA-Z0-9_]*\((?:\$[a-z][a-zA-Z0-9]*\s*,\s*)*
(?:\$[
a-z][A-Za-z0-9_]*\s*=[^\$\)]+)+\$[a-z][a-zA-Z0-9_]*\)
?>

for
<?php
public function test($a, $b) {
$a = [];
$b = [$abc => $ss[],
];
}

private function
too($c, $a = true, $b) {
}

protected function
bar($a = []) {
}

public function
foo($a, $b = true) {
}

public function
fooBar32($a=true, $b = [], $c) {
}

private function
oo_bAr($a = []) {
}
?>
it will match too() and fooBar32()

Have a nice migration! ;)
To Top