Sortie du langage de programmation PHP 7.4

Après un an de développement soumis version du langage de programmation PHP 7.4. La nouvelle branche comprend une série de nouvelles fonctionnalités, ainsi que plusieurs modifications qui rompent la compatibilité.

Clé améliorations en PHP 7.4 :

  • Propriétés typées - les propriétés de classe peuvent désormais inclure des déclarations de type, par exemple :

    Utilisateur de classe {
    public int $id ;
    chaîne publique $nom ;
    }

  • Abrégé syntaxe pour définir les fonctions « fn(parameter_list) => expr » avec liaison de portée par valeur. Par exemple, « fn($x) => $x + $y » est analogue à « $fn2 = function ($x) use ($y) {return $x + $y;} »);
  • Opérateur d'affectation abrégée "??=" qui peut être utilisé pour définir une valeur par défaut ("a ??= b" est similaire à "a = a ?? b", si "a" est défini sa valeur est stockée, et si elle n'est pas définie se voit attribuer la valeur "b" );
  • Limité occasion en préservant la hiérarchie d'héritage des types dans les types de retour dérivés, ou la possibilité d'inverser la hiérarchie des types d'origine dans les types d'arguments dérivés (covariance contravariance entre le type de retour et le type d’argument). Les constructions suivantes peuvent désormais être utilisées en PHP :

    Classe A {}
    la classe B étend A {}

    Producteur de classe {
    méthode de fonction publique() : A {}
    }
    la classe ChildProducer étend Producer {
    méthode de fonction publique() : B {}
    }

  • Opérateur de décompression à l'intérieur des tableaux « …$var », en permettant effectuer la substitution des tableaux existants lors de la définition d'un nouveau tableau ;

    $parts = ['pomme', 'poire'];
    $fruits = ['banane', 'orange', …$parts, 'pastèque'];
    // ['banane', 'orange', 'pomme', 'poire', 'pastèque'];

  • Occasion représentation visuelle de grands nombres avec délimiteurs en littéraux numériques (1_000_000_00) ;
  • support liens faibles, qui vous permettent de conserver une référence à un objet, mais n'empêchent pas le ramasse-miettes de supprimer l'objet associé ;
  • nouveau machines la sérialisation d'objets (une combinaison de Serialisable et __sleep()/__wakeup()), qui a remplacé l'interface Serialisable, qui sera obsolète ;

    // Renvoie un tableau contenant tous les états de l'objet ;
    fonction publique __serialize() : tableau ;

    // Restaure l'état d'un objet à partir d'un tableau
    fonction publique __unserialize(array $data): void;

  • Autorisé à lever des exceptions à partir d'une méthode __toString();
  • Ajout de la prise en charge du préchargement du cache de code objet. Paramètre ajouté pour le réglage
    opcache.preload, grâce auquel vous pouvez spécifier un script PHP qui sera compilé et exécuté au démarrage du serveur. Ce script peut charger l'opcode d'autres fichiers via leur inclusion directe ou en utilisant la fonction opcache_compile_file() ;

  • Ajout de la fonction crc32c à l'extension Hash pour calculer les sommes de contrôle à l'aide du polynôme de Castagnoli ;
  • Ajout du support à la fonction password_hash() pour les méthodes de hachage de mot de passe argon2i et argin2id, dans l'implémentation de la bibliothèque Sodium, si PHP est construit sans libargon ;
  • Ajout de la fonction mb_str_split(), similaire à str_split(), mais fonctionnant non pas avec des octets mais avec des positions de caractères dans une chaîne multi-octets ;
  • La fonction strip_tags() a désormais la possibilité de transmettre un tableau avec des noms de balises, c'est-à-dire au lieu de strip_tags($str, ' '), vous pouvez désormais spécifier strip_tags($str, ['a', 'p']);
  • proc_open() permet aux opérandes d'être répertoriés dans un tableau, plutôt que dans une chaîne à exécuter, et fournit également la redirection de thread et la prise en charge d'un descripteur de fichier nul ;

    proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);

    // Comme 2>&1 dans le shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

    // comme 2>/dev/null ou 2>nul dans le shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Les extensions Firebird/Interbase, Recode et WDDX sont exclues de la distribution de base. Ces extensions sont désormais distribuées via PECL ;
  • Transféré à la catégorie obsolète des fonctionnalités telles que les opérateurs ternaires imbriqués sans parenthèses, l'accès aux éléments de tableau et aux chaînes à l'aide d'accolades ("$var{$idx}"), la fonction is_real() et la conversion en real, en utilisant le mot-clé parent sans classe parent, le paramètre de configuration allow_url_include , en utilisant array_key_exists() sur les objets.

    Les fonctions get_magic_quotes_gpc(), get_magic_quotes_runtime() et
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restaurer_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Un avertissement concernant l'utilisation d'une fonctionnalité obsolète a été fourni lors de la tentative de traitement de symboles incorrects dans les fonctions
    base_convert(), bindec(), octdec() et hexdec(), et lors de la spécification d'un modèle sans chaîne dans mb_ereg_replace().

Source: opennet.ru

Ajouter un commentaire