SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
PHP 7.3 AND ITS RFC
PHP 7.3 beta 3
AFUP Toulouse - 2018 - France
AGENDA
• PHP 7.3
• Nouveautés, incompatibilités
• Comment migrer
• les RFC
SPEAKER
• Damien Seguy
• Exakat CTO
• Analyse statique
pour PHP
PROGRAMME
• 1er aout 2018 : Feature freeze
• 2 aout 2018 : beta 1
• 13 septembre 2018 : RC1
• 13 décembre 2018 : 7.3.0
EVOLUTIONS MAJEURES
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
RELAXED HEREDOC/NOWDOC
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
} <?php
function foo($arg) {
$bar = <<<'EOT'
bar$arg
EOT;
}
RELAXED HEREDOC/NOWDOC
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
"bar"
• Tabulations or spaces
• Don't mix them!
RELAXED HEREDOC/NOWDOC
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
" bar"
• 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,
);
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
}
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
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
INFRASTRUCTURE
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
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
EVOLUTIONS MINEURES
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"?`
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…
COMPACT SIGNALE LES
VARIABLES NON DÉFINIES
$foo = 'bar';
 
$baz = compact('foo', 'foz'); // Notice:
compact(): Undefined variable: foz
NET_GET_INTERFACES()
• Liste les
interfaces
réseaux
disponibles.
• Permet de lire
les
informations
système.
Array
(
[lo0] => Array
(
[unicast] => Array
(
[0] => Array
(
[flags] => 32841
[family] => 18
)
[1] => Array
(
[flags] => 32841
[family] => 30
[address] => ::1
[netmask] => ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
)
[2] => Array
(
[flags] => 32841
[family] => 2
[address] => 127.0.0.1
[netmask] => 255.0.0.0
)
[3] => Array
(
[flags] => 32841
[family] => 30
[address] => fe80::1
[netmask] => ffff:ffff:ffff:ffff::
)
)
)
[gif0] => Array
IS_COUNTABLE()
• is_countable() vérifie qu'une variable peut être
comptée avec count()
• un array() ou un objet avec l'interface Countable
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
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
LIST() WITH REFERENCE
$array = [1, 2];
list($a, &$b) = $array;
$array = [1, 2];
$a = $array[0];
$b =& $array[1];
LIST() WITH REFERENCE
$array = [[1, 2], [3, 4]];
foreach ($array as list(&$a, $b)) {
$a = 7;
}
var_dump($array)
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
PREMIÈRE CLÉ D'UN TABLEAU
// usage of an associative array
$array = ['a' => 1, 'b' => 2, 'c' => 3];
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];
ARRAY_KEY_LAST,
ARRAY_KEY_FIRST
// usage of an associative array
$array = ['a' => 1, 'b' => 2, 'c' => 3];
 
$firstKey = array_key_first($array);
$lastKey = array_key_last($array);
 
assert($firstKey === 'a');
assert($lastKey === 'c');
DIVERS
• Retrait du support de BeOS
• FILTER_SANITIZE_ADD_SLASHES
RFC
RFC : COMMENT CA MARCHE
RFC : COMMENT CA MARCHE
• Under Discussion
• In draft
• Pending Implementation
• For PHP 8.0
• PHP 7.3
• PHP 7.2…
RFC : COMMENT CA MARCHE
• Under Discussion
• In draft
• Pending Implementation
• For PHP 8.0
• PHP 7.3
• PHP 7.2…
MERCI!
@EXAKAT - HTTP://WWW.EXAKAT.IO/

Contenu connexe

Tendances

Un serveur rest en moins de 5 minutes
Un serveur rest en moins de 5 minutesUn serveur rest en moins de 5 minutes
Un serveur rest en moins de 5 minutesOlivier ETIENNE
 
PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4julien pauli
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPjulien pauli
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...Publicis Sapient Engineering
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 

Tendances (9)

Un serveur rest en moins de 5 minutes
Un serveur rest en moins de 5 minutesUn serveur rest en moins de 5 minutes
Un serveur rest en moins de 5 minutes
 
PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Mysql
MysqlMysql
Mysql
 
REX Storm Redis
REX Storm RedisREX Storm Redis
REX Storm Redis
 

Similaire à Php 7.3 et ses RFC (AFUP Toulouse)

Retour d'expérience sur notre stack de log
Retour d'expérience sur notre stack de logRetour d'expérience sur notre stack de log
Retour d'expérience sur notre stack de logJulien Maitrehenry
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPhalleck45
 
Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)Vincent Biret
 
Meetup Google Cloud
Meetup Google CloudMeetup Google Cloud
Meetup Google CloudPierre Coste
 
Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Arnaud LEMAIRE
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Cellenza
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPrestaShop
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfonyjeUXdiCode
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Normandie Web Xperts
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)Rui Carvalho
 
J1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric CharlierJ1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric CharlierMS Cloud Summit
 
Nouveautés dans TYPO3 CMS 6.0
Nouveautés dans TYPO3 CMS 6.0Nouveautés dans TYPO3 CMS 6.0
Nouveautés dans TYPO3 CMS 6.0Idéative
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfrachidimstapha
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 

Similaire à Php 7.3 et ses RFC (AFUP Toulouse) (20)

Retour d'expérience sur notre stack de log
Retour d'expérience sur notre stack de logRetour d'expérience sur notre stack de log
Retour d'expérience sur notre stack de log
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Meetup Google Cloud
Meetup Google CloudMeetup Google Cloud
Meetup Google Cloud
 
Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Riak introduction
Riak introductionRiak introduction
Riak introduction
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
J1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric CharlierJ1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric Charlier
 
Nouveautés dans TYPO3 CMS 6.0
Nouveautés dans TYPO3 CMS 6.0Nouveautés dans TYPO3 CMS 6.0
Nouveautés dans TYPO3 CMS 6.0
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdf
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 

Plus de Damien Seguy

Strong typing @ php leeds
Strong typing  @ php leedsStrong typing  @ php leeds
Strong typing @ php leedsDamien Seguy
 
Strong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationStrong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationDamien Seguy
 
Qui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeQui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeDamien Seguy
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applicationsDamien Seguy
 
Top 10 pieges php afup limoges
Top 10 pieges php   afup limogesTop 10 pieges php   afup limoges
Top 10 pieges php afup limogesDamien Seguy
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Damien Seguy
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Damien Seguy
 
Top 10 php classic traps confoo
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confooDamien Seguy
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Damien Seguy
 
Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbiaDamien Seguy
 
Top 10 php classic traps
Top 10 php classic trapsTop 10 php classic traps
Top 10 php classic trapsDamien Seguy
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappesDamien Seguy
 
Code review workshop
Code review workshopCode review workshop
Code review workshopDamien Seguy
 
Understanding static analysis php amsterdam 2018
Understanding static analysis   php amsterdam 2018Understanding static analysis   php amsterdam 2018
Understanding static analysis php amsterdam 2018Damien Seguy
 
Review unknown code with static analysis php ce 2018
Review unknown code with static analysis   php ce 2018Review unknown code with static analysis   php ce 2018
Review unknown code with static analysis php ce 2018Damien Seguy
 
Everything new with PHP 7.3
Everything new with PHP 7.3Everything new with PHP 7.3
Everything new with PHP 7.3Damien Seguy
 
Review unknown code with static analysis php ipc 2018
Review unknown code with static analysis   php ipc 2018Review unknown code with static analysis   php ipc 2018
Review unknown code with static analysis php ipc 2018Damien Seguy
 
Code review for busy people
Code review for busy peopleCode review for busy people
Code review for busy peopleDamien Seguy
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonightDamien Seguy
 
Machine learning in php las vegas
Machine learning in php   las vegasMachine learning in php   las vegas
Machine learning in php las vegasDamien Seguy
 

Plus de Damien Seguy (20)

Strong typing @ php leeds
Strong typing  @ php leedsStrong typing  @ php leeds
Strong typing @ php leeds
 
Strong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationStrong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisation
 
Qui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeQui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le code
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
Top 10 pieges php afup limoges
Top 10 pieges php   afup limogesTop 10 pieges php   afup limoges
Top 10 pieges php afup limoges
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)
 
Top 10 php classic traps confoo
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confoo
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4
 
Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbia
 
Top 10 php classic traps
Top 10 php classic trapsTop 10 php classic traps
Top 10 php classic traps
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappes
 
Code review workshop
Code review workshopCode review workshop
Code review workshop
 
Understanding static analysis php amsterdam 2018
Understanding static analysis   php amsterdam 2018Understanding static analysis   php amsterdam 2018
Understanding static analysis php amsterdam 2018
 
Review unknown code with static analysis php ce 2018
Review unknown code with static analysis   php ce 2018Review unknown code with static analysis   php ce 2018
Review unknown code with static analysis php ce 2018
 
Everything new with PHP 7.3
Everything new with PHP 7.3Everything new with PHP 7.3
Everything new with PHP 7.3
 
Review unknown code with static analysis php ipc 2018
Review unknown code with static analysis   php ipc 2018Review unknown code with static analysis   php ipc 2018
Review unknown code with static analysis php ipc 2018
 
Code review for busy people
Code review for busy peopleCode review for busy people
Code review for busy people
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonight
 
Machine learning in php las vegas
Machine learning in php   las vegasMachine learning in php   las vegas
Machine learning in php las vegas
 

Php 7.3 et ses RFC (AFUP Toulouse)

  • 1. PHP 7.3 AND ITS RFC PHP 7.3 beta 3 AFUP Toulouse - 2018 - France
  • 2. AGENDA • PHP 7.3 • Nouveautés, incompatibilités • Comment migrer • les RFC
  • 3. SPEAKER • Damien Seguy • Exakat CTO • Analyse statique pour PHP
  • 4. PROGRAMME • 1er aout 2018 : Feature freeze • 2 aout 2018 : beta 1 • 13 septembre 2018 : RC1 • 13 décembre 2018 : 7.3.0
  • 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
  • 7. RELAXED HEREDOC/NOWDOC <?php class foo { public $bar = <<<EOT bar EOT; } <?php function foo($arg) { $bar = <<<'EOT' bar$arg EOT; }
  • 8. RELAXED HEREDOC/NOWDOC <?php class foo { public $bar = <<<EOT bar EOT; } "bar"
  • 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
  • 21. NET_GET_INTERFACES() • Liste les interfaces réseaux disponibles. • Permet de lire les informations système. Array ( [lo0] => Array ( [unicast] => Array ( [0] => Array ( [flags] => 32841 [family] => 18 ) [1] => Array ( [flags] => 32841 [family] => 30 [address] => ::1 [netmask] => ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff ) [2] => Array ( [flags] => 32841 [family] => 2 [address] => 127.0.0.1 [netmask] => 255.0.0.0 ) [3] => Array ( [flags] => 32841 [family] => 30 [address] => fe80::1 [netmask] => ffff:ffff:ffff:ffff:: ) ) ) [gif0] => Array
  • 22. IS_COUNTABLE() • is_countable() vérifie qu'une variable peut être comptée avec count() • un array() ou un objet avec l'interface Countable
  • 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
  • 25. LIST() WITH REFERENCE $array = [1, 2]; list($a, &$b) = $array; $array = [1, 2]; $a = $array[0]; $b =& $array[1];
  • 26. LIST() WITH REFERENCE $array = [[1, 2], [3, 4]]; foreach ($array as list(&$a, $b)) { $a = 7; } var_dump($array)
  • 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];
  • 30. ARRAY_KEY_LAST, ARRAY_KEY_FIRST // usage of an associative array $array = ['a' => 1, 'b' => 2, 'c' => 3];   $firstKey = array_key_first($array); $lastKey = array_key_last($array);   assert($firstKey === 'a'); assert($lastKey === 'c');
  • 31. DIVERS • Retrait du support de BeOS • FILTER_SANITIZE_ADD_SLASHES
  • 32.
  • 33. RFC
  • 34. RFC : COMMENT CA MARCHE
  • 35. RFC : COMMENT CA MARCHE • Under Discussion • In draft • Pending Implementation • For PHP 8.0 • PHP 7.3 • PHP 7.2…
  • 36. RFC : COMMENT CA MARCHE • Under Discussion • In draft • Pending Implementation • For PHP 8.0 • PHP 7.3 • PHP 7.2…
  • 37.
  • 38.
  • 39.
  • 40.