PHP 7.3 sera en beta à la fin de l'été, et cible une sortie avant Noel. De nombreuses nouveautés sont prévues de longue date, comme l'évolution de la syntaxe heredoc, ou les , finales pour les appels de fonctions, tandis qu'une rafale de nouveautés se bousculent au portillon, et ont même généré une alpha 4. Nous passerons en revue toutes ces évolutions, ainsi que les incompatibilités, comment les trouver dans du code, et comment fonctionnent les RFC de PHP.
6. GARBAGE COLLECTOR AMÉLIORÉ
// Very, very, very many objects
GC | OLD | NEW
disabled | 1.32s | 1.50s
enabled | 12.75s | 2.32s
// Very many objects
GC | OLD | NEW
disabled | 0.87s | 0.87s
enabled | 1.48s | 0.94s
// Less many objects
GC | OLD | NEW
disabled | 1.65s | 1.62s
enabled | 1.75s | 1.62s
• 10% de pertes si
désactivé
• Si peu d'objects, peu
de gains
• Si beaucoup d'objets,
beaucoup de gain
• La plupart des scripts
n'utilisent pas le GC
9. • Tabulations or spaces
• Don't mix them!
RELAXED HEREDOC/NOWDOC
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
" bar"
10. • Trailing comma
• Comme pour les tableaux
• Le dernier élément peut être vide
• Seulement applicable au dernier element
• Valable pour les méthodes et les fonctions
• Pratique pour éviter les diff trop longs
VIRGULE TERMINALE
foo(
$foo,
$bar,
$baz,
);
11. PLUS DE CONSTANTES
INSENSIBLES À LA CASSE
namespace {
define('NSFOO', 42, true);
// constante insensible à la casse
}
namespace Test {
use const NSFOO;
var_dump(FOO); // OK
var_dump(foo); // Warning
}
12. PLUS DE CONSTANTES
INSENSIBLES À LA CASSE
Case-insensitive constants are deprecated. The
correct casing for this constant is "%s
define(): Declaration of case-insensitive
constants is deprecated
• Nouvelles erreurs
13. PLUS DE CONSTANTES
INSENSIBLES À LA CASSE
• Les conventions sont de faire des constantes en
majuscules et de les utiliser en majuscule
• Les constantes sont de plus en plus définies avec
const, et non plus avec define()
• null, true, false seront des mots réservés en PHP 8
• Il reste les fonctions insensibles à la casse
15. NOUVEAU SQLITE3
• Version 3.24
• Ajout du support de UPSERT
• UPSERT = INSERT or UPDATE
• An UPSERT is an ordinary INSERT statement that is
followed by the special ON CONFLICT clause
shown above.
• REPLACE = INSERT or OVERWRITE
16. NEW PCRE VERSION : 2.0!
• PHP 7.2 utilise PCRE1
• PHP 7.3 utilise PCRE2
• Beaucoup de nouveautés, peu d'incompatibilité
• les options X et S disparaissent
• Plus de vérifications à la compilation
18. CONTINUE IS FOR LOOPS
<?php
while ($foo) {
switch ($bar) {
case "baz":
continue; // In PHP: Behaves like "break;"
// In C: Behaves like "continue 2;"
}
}
?>
`"continue" targeting switch is equivalent to
"break". Did you mean to use "continue 2"?`
19. JSON_ENCODE ÉMET DES
EXCEPTIONS
• json_encode/json_decode peuvent retourner
NULL , false, chaîne vide
• Comment faire la différence entre une erreur et un
encodage correct ?
• nouvelle option : JSON_THROW_ON_ERROR, à
utiliser avec un try{} catch
• A suivre…
20. COMPACT SIGNALE LES
VARIABLES NON DÉFINIES
$foo = 'bar';
$baz = compact('foo', 'foz'); // Notice:
compact(): Undefined variable: foz
23. HRTIME
• HRTIME est un compteur monotone
• Il mesure le temps entre deux moments
• Il n'est pas soumis au calendrier comme
microtime() : heure d'été/hivers, secondes
supplémentaires..
• Il est très précis
• il a la même API que microtime
24. SAME SITE COOKIE
• setcookie
• setrawcookie
• session_set_cookie_params
• session_get_cookie_params
void session_set_cookie_params ( int $lifetime
[, array $options ] )
Set-Cookie: key=value; path=/; domain=example.org;
HttpOnly; SameSite=Lax
27. REMOVED FEATURES
• image2wbmp
• imagefromstring() support webp désormais
• alias mbstring() qui ne sont pas documentés
• Définition d'une fonction assert()
• Recherche dans une chaîne avec des entiers
28. PREMIÈRE CLÉ D'UN TABLEAU
// usage of an associative array
$array = ['a' => 1, 'b' => 2, 'c' => 3];
29. PREMIÈRE CLÉ D'UN TABLEAU
// usage of an associative array
$array = ['a' => 1, 'b' => 2, 'c' => 3];
$firstKey = array_keys($array)[0];
$lastKey = array_keys($array)[count($array) - 1];