Rencontre

Présentation de Damien Seguy @faguo sur PHP 7.3 (beta 1) et les RFC.

Début de la présentation à 19:00 dans les locaux de Lightspeed (le château).

Contenu

Évolution (par rapport à la 7.2)

  • Amélioration du Garbage Collector s'il y a beaucoup beaucoup d'objets. (en préparation pour PHP 8)
  • Flexible heredoc/nowdoc. C'est à dire, l'indentation du contenu dépend de l'indentation du délimiteur de fin. Les espaces et les tabulations peuvent être utilisées.
        // anciennement
        $a = <<<'BLA'
    ceci est du texte
       test test
    BLA;
    // le délimiteur de fin devait être au début de la ligne
        // en 7.3
        $a = <<<'BLA'
        ceci est du texte
           test test
        BLA;
    // le délimiteur indique le nombre d'espace d'indentation des autres lignes
    // les deux $a sont identiques.
    

    Peut causer des problème s'il y avait des lignes au centre du contenu avec des espaces et le délimiteur de fin.

  • Support des virgules terminales dans les appels de fonctions, comme on pouvait le faire avec les tableaux (array). f(1, 2, 3, ) donne la même chose que f(1, 2, 3). Permet d'uniformiser la syntaxe avec array(1, 2, 3, ) et d'enlever des erreurs lorsqu'on ajoute des paramètres d'une fonction multiligne et qu'on oublie la virgule à l'avant dernier argument. Il y a moins de modification de ligne dans les diffs.
    maFonction(1,
               2,
               3,
    );
  • Les constantes insensibles à la casse sont dépréciées en 7.3. On pouvait en créer avec define('nom', 'valeur', true). Produit un avertissement (notice). Les constantes déclarées avec const sont déjà sensibles à la case (globale ou de classe). Les exceptions sont: true, false et null. Voir la RFC. Note les constantes "const" sont compilées et les constantes avec "define()" sont dynamiques.

Modules: nouveau sqlite3 avec UPSERT, nouveau PCRE 2.0 sans X et S. Meilleure compilation en version 2.

Évolutions mineures

  • Drapeau JSON_THROW_ON_ERROR et exception JsonException avec json_encode/json_decode pour lever des exceptions s'il y a des erreurs. RFC: JSON_THROW_ON_ERROR
    try {
      json_decode("{", false, 512, JSON_THROW_ON_ERROR);
    } catch (JsonException $e) {
      // $e->getCode() are JSON_ERROR_NONE, JSON_ERROR_DEPTH, JSON_ERROR_STATE_MISMATCH, JSON_ERROR_CTRL_CHAR, 
                           JSON_ERROR_SYNTAX, JSON_ERROR_UTF8, JSON_ERROR_RECURSION, JSON_ERROR_INF_OR_NAN, 
                           JSON_ERROR_UNSUPPORTED_TYPE, JSON_ERROR_INVALID_PROPERTY_NAME, JSON_ERROR_UTF16
    }
    
  • compact() lance un avertissement si on utilise une variable non définie
  • nouvelle fonction net_get_interfaces()
  • nouvelle fonction is_countable() pour les array ou classe avec l'interface Countable
  • ajout de l'option SameSite pour les témoins (cookies)
  • list() supporte maintenant les références. Exemple: $arr = [1, 2]; list($a, &$b) = $arr;
  • On peut utiliser list() dans les foreach. Exemple: $arr = [[1, 2], [3, 4]); foreach ($arr as list($a, b)) { echo $a+$b; }
  • image2wbmp() a été enlevé.
  • amélioration des hashs de mot de passe d'argon2.
  • ajout des fonction array_key_first() et array_key_last(). Pas de fonctions pour la première ou dernière valeur.
  • BeOS n'est plus supporté
  • Ajout de FILTER_SANITIZE_ADD_SLASHES

Déroulement

Il y avait une personne pour ouvrir les portes et les ascenseurs, sans déranger l'agent de sécurité. C'est grandement apprécié. Il n'y a pas eu de problème avec le projecteur. Pas besoin de micro. Présentation interactive du début à la fin avec des blagues. Questions répondues tout le long de la présentation. Je connaissais le truc pour sortir par les portes avant (le bouton vert sur le côté gauche).