Où en est PHP en 2023 ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870203/clipart2934061.png)
A propos de moi
Karim Pinchon
- Développeur backend
- @kpn13
- https://blog.karimpinchon.com
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/7731154/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9849002/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870225/PngItem_175427.png)
A propos de moi
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Pourquoi cette présentation ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848995/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848997/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848998/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9849001/pasted-from-clipboard.png)
Pourquoi cette présentation ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://media3.giphy.com/media/3oz8xTmX0sd5FjqrYc/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9849018/pasted-from-clipboard.png)
J'
PHP
Pourquoi cette présentation ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9862893/image.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9859103/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870446/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871227/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871228/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871236/pasted-from-clipboard.png)
Pourquoi cette présentation ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Le langage
Le langage
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Un bref historique
Une histoire de performances
Quoi de neuf ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881851/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881855/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881857/pasted-from-clipboard.png)
Un bref historique
Un bref historique
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Création de PHP
Foundation PHP
PHP 7
1994
Composer
/ Packagist
2015
2010
PHP 6
2021
2009
2011
2022
PHP 8.2
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873221/PngItem_908206.png)
PHP-FIG
Que lui reproche-t-on ?
Un bref historique
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://media1.giphy.com/media/8Ue8ekoT67ylq/giphy.gif)
(historiquement)
Que lui reproche-t-on ?
Un bref historique
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9876092/pasted-from-clipboard.png)
PHP-FIG
Un bref historique
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
PHP Framework Interop Group
Une histoire de performances
Les performances
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9879988/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9879988/pasted-from-clipboard.png)
Les performances
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9880035/pasted-from-clipboard.png)
Les performances
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Et face aux autres langages ?
![](https://media4.giphy.com/media/g01ZnwAUvutuK8GIQn/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9849024/pasted-from-clipboard.png)
Les performances
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Consommation d'énergie
source : https://greenlab.di.uminho.pt
Quoi de neuf ?
(depuis nos premières pages web)
class BlogData
{
/** @var string */
private $title;
/** @var State */
private $state;
/** @var \DateTimeImmutable|null */
private $publishedAt;
/**
* @param string $title
* @param State $state
* @param \DateTimeImmutable|null $publishedAt
*/
public function __construct(
$title,
$state,
$publishedAt = null
) {
$this->title = $title;
$this->state = $state;
$this->publishedAt = $publishedAt;
}
/**
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* @return State
*/
public function getState()
{
return $this->state;
}
/**
* @return \DateTimeImmutable|null
*/
public function getPublishedAt()
{
return $this->publishedAt;
}
}
class BlogData
{
public function __construct(
public readonly string $title,
public readonly State $state,
public readonly ?DateTimeImmutable $publishedAt = null,
) {}
}
Type de retour
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
function foo($bar): bool
{
...
}
Depuis PHP 7.0 (fin 2015)
Type hint scalaire
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
function foo(string $bar): bool
{
...
}
Depuis PHP 7.0 (fin 2015)
Erreur fatale
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
try {
// code déclenchant une fatale
} catch (\Exception $e) {
// ras
} catch (\Error $e) {
// ici on peut gérer le problème
}
Depuis PHP 7.0 (fin 2015)
Types nullables
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
function foo(?string $bar): ?int
{
...
}
Depuis PHP 7.1 (fin 2016)
Type hint d'objets
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
function foo(Bar $bar)
{
...
}
Depuis PHP 7.2 (fin 2017)
Les propriétés typées
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
class Foo
{
public string $bar;
public Baz $baz;
}
Depuis PHP 7.4 (fin 2019)
Les fonctions fléchées
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
$func = fn(Foo $f) => echo $f->name;
$func($foo);
Depuis PHP 7.4 (fin 2019)
Promotion de propriété de constructeur
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
class Foo
{
public function __construct(
private Bar $bar,
private string $name,
) {}
}
Depuis PHP 8.0 (fin 2020)
Les propriétés nommées
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
function foo(string $arg1, string $arg2) { ... }
foo(arg2: 'bar', arg1: 'baz');
Depuis PHP 8.0 (fin 2020)
Les attributs
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
use App\Attributes\BarAttribute;
#[BarAttribute]
class Foo
{
#[BarAttribute]
public $baz;
}
Depuis PHP 8.0 (fin 2020)
Match()
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
echo match($a) {
'foo' => 'Mon nom est foo',
'bar' => 'Mon nom est bar',
'baz' => 'Mon nom est baz',
default => 'Mon nom est personne'
}
Depuis PHP 8.0 (fin 2020)
Opérateur "null safe"
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
$foo = $foo->getBar()?->getName();
Depuis PHP 8.0 (fin 2020)
str_contains()
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
// avant
strpos($sentence, 'foo') !== false;
// après
str_contains($sentence, 'foo');
Depuis PHP 8.0 (fin 2020)
Union et intersection de types
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
// PHP 8.0
function foo(Bar|Baz $ba) { ... }
// PHP 8.1
function foo(Bar&Baz $ba) { ... }
Depuis PHP 8.0 (fin 2020) et 8.1 (fin 2021)
Les enums
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
enum Status
{
case OPEN;
case CLOSE;
}
Depuis PHP 8.1 (fin 2021)
Les propriétés readonly
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
class Foo
{
public readonly Bar $bar;
}
Depuis PHP 8.1 (fin 2021)
Callable de première classe
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
<?php
$foo = $this->foo(...);
$fn = strlen(...);
Depuis PHP 8.1 (fin 2021)
Just-in-time (JIT) compiler
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Multi threading
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
TODO
Ce qu'il manque
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Les génériques
Nettoyer les inconsistances de l'API
Des objets
scalaires
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9875992/pasted-from-clipboard.png)
L'ecosystème
L'écosystème
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Construire une app
Développer une app
Tester une app
Assurer la qualité
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881865/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881868/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881869/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881870/pasted-from-clipboard.png)
Construire une application
Composer
Construire une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9878874/pasted-from-clipboard.png)
Composer
Construire une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9878882/logo-composer-transparent4.png)
Le gestionnaire de
dépendances de PHP
- actuellement en V2 (perfs )
- dispo sur toutes les platformes
- image docker officielle
Frameworks
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848901/pasted-from-clipboard.png)
source: Jetbrain, 2021
Construire une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Les plus utilisés
Frameworks
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9861958/pasted-from-clipboard.png)
Construire une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Frameworks
Construire une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881894/pasted-from-clipboard.png)
- API first
- RAD
- REST et GraphQL
- interopérable / web sémantique
- générateur d'admin et clients
Asynchrone
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
- générateurs
- promises
- fibers
- ReactPHP
- AMPHP
- ...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9911371/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9911373/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9911388/pasted-from-clipboard.png)
Serverless
Les fonctionnalités
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9911368/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9914882/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9914900/kisspng-speech-balloon-comics-line-art-american-comic-book-circular-progress-bar-5ad7a64db76777.0935348615240822537512.png)
Heyyyy !
Vanilla PHP
- micro page web
- cli
- script
Construire une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://media4.giphy.com/media/1iZT3bqPZIfN3flm/giphy.gif)
Développer une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848973/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848974/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848981/pasted-from-clipboard.png)
Développer une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873031/pasted-from-clipboard.png)
IDE
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873154/pasted-from-clipboard.png)
Développer une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
source: Jetbrain, 2021
IDE
Les plus utilisés
Debugger du PHP
<?php
echo 'coucou';
dd($foo);
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9458095/raising-hands_1f64c.png)
Développer une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Debugger du PHP
Développer une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9882401/pasted-from-clipboard.png)
Debugger du PHP
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848982/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848992/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9862762/pasted-from-clipboard.png)
Développer une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Profiler du PHP
Développer une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9875874/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9979723/pasted-from-clipboard.png)
Tester une application
- PHPUnit
- PHPSpec
- Pest
- Behat
- InfectionPHP
- Panther
- ...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848909/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848910/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848911/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848912/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848913/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848914/pasted-from-clipboard.png)
Tester une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Frameworks de test
Je veux écrire des tests unitaires pour m'assurer de la non régression de mes fonctions / méthodes :
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848909/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848910/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848911/pasted-from-clipboard.png)
Tester une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Frameworks de test
Je veux écrire des tests d'intégration pour m'assurer du bon fonctionnement de mon application :
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848912/pasted-from-clipboard.png)
Tester une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Frameworks de test
Je veux écrire des tests "end to end" pour m'assurer du bon fonctionnement de mon application :
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848914/pasted-from-clipboard.png)
Tester une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Frameworks de test
Je veux écrire des tests de mutation pour m'assurer de la pertinence de mes tests :
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9848913/pasted-from-clipboard.png)
Tester une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Frameworks de test
Assurer la qualité d'une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9850855/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9850856/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9850860/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9850861/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9850883/pasted-from-clipboard.png)
- PHPStan
- PHPInsights
- PHP-CS-Fixer
- Psalm
- RectorPHP
- ...
Assurer la qualité d'une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
PHPStan
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9850855/pasted-from-clipboard.png)
Finds bugs in your code without writing tests
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9861898/pasted-from-clipboard.png)
Assurer la qualité d'une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
PHPInsight
analyze the code quality of your PHP projects
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9861917/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9850856/pasted-from-clipboard.png)
Assurer la qualité d'une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
PHP-CS-Fixer
fixes your code to follow standards
Assurer la qualité d'une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9850883/pasted-from-clipboard.png)
- applique des standards
- configurable
RectorPHP
How can We Upgrade PHP and FW?
Assurer la qualité d'une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9850861/pasted-from-clipboard.png)
- utiliser les nouveautés de PHP
- migrer de versions de Symfony, ...
- appliquer des règles custom
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9862665/pasted-from-clipboard.png)
Assurer la qualité d'une application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Le monde réel
La fondation PHP
Le monde réel
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
La communauté
Côté entreprise
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881878/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881884/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9881886/pasted-from-clipboard.png)
La fondation PHP
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870055/pasted-from-clipboard.png)
Quoi ?
-> association à but non lucratif
Quand ?
-> créée en 2021
Pourquoi ?
-> développer PHP
Comment ?
-> sponsorisée
La fondation PHP
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865052/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865053/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865054/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865055/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865056/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865058/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865060/pasted-from-clipboard.png)
Créateur de PHP
Rasmus Lerdorf
Dmitry Stogov
Développeur core PHP
Nikita Popov
Sara Golemon
Derick Rethans
Sebastian Bergmann
Joe Watkins
Développeur core PHP
Développeuse core PHP
Co créatrice de HHVM
Créateur de Xdebug
Créateur de PHPUnit
La fondation PHP
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Administration temporaire
Développeur core PHP
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865054/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865055/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865058/pasted-from-clipboard.png)
Sara Golemon
Sebastian Bergmann
Joe Watkins
Développeur core PHP
Co créatrice de HHVM
Créateur de PHPUnit
Nils Adermann
Co-créateur de Composer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869453/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869455/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869458/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869462/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869476/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865060/pasted-from-clipboard.png)
Nikita Popov
Développeur
core PHP
Roman Pronskiy
![foo](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9868115/pasted-from-clipboard.png)
Core team
Symfony
Josepha Haden
Benjamin Eberlei
Matthew Weier
Nicolas Grekas
Directrice executive
Wordpress
Manager chez
Jetbrains
Lead chez Zend
La fondation PHP
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Administration actuelle
Développeur
core PHP
Développeur
core PHP
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865056/pasted-from-clipboard.png)
Arnaud Le Blanc
Derick Rethans
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869041/pasted-from-clipboard.png)
George Peter Banyard
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869167/pasted-from-clipboard.png)
Ilija Tolivo
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869174/pasted-from-clipboard.png)
Jakub Zelenka
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869190/pasted-from-clipboard.png)
Máté Kocsis
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9869196/pasted-from-clipboard.png)
La fondation PHP
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Six dev à temps partiel
La communauté
La communauté
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Langages les plus populaires
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873712/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873725/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873732/pasted-from-clipboard.png)
source : stackoverflow
La communauté
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Langages les plus utilisés
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/8571887/pasted-from-clipboard.png)
source : github
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/10003331/pasted-from-clipboard.png)
La communauté
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9875812/pasted-from-clipboard.png)
source : Jetbrains
Part de PHP en tant que principal langage
En quelques chiffres :
- créée en 2001
- environ 500 membres
- 15 antennes locales
- des centaines de personnes
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870256/pasted-from-clipboard.png)
AFUP
Association Française des Utilisateurs de PHP
La communauté
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
ForumPHP
AFUPDay
SuperApéro PHP
Baromètre des salaires
Newsletter veille techno
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870256/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870277/PngItem_905883.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870278/PngItem_301666.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870288/PngItem_1061498.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870291/PngItem_433793.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870305/PngItem_126822.png)
...
La communauté
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
AFUP
Association Française des Utilisateurs de PHP
La communauté
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/10242643/pasted-from-clipboard.png)
Côté entreprise
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9864419/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9864420/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9864424/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9865150/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9868057/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9868058/pasted-from-clipboard.png)
Côté entreprise
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Des projets d'envergures
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9849008/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9849011/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9849003/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9864436/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9864437/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9864439/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9864440/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9864450/pasted-from-clipboard.png)
Côté entreprise
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Des startups qui misent dessus
![](https://media3.giphy.com/media/utJKJmadD3dZFJ01XR/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9884130/pasted-from-clipboard.png)
Côté entreprise
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Offres d'emploi
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873814/pasted-from-clipboard.png)
19% des offres
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873822/pasted-from-clipboard.png)
13% des offres
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873830/pasted-from-clipboard.png)
12% des offres
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873849/pasted-from-clipboard.png)
7% des offres
(Septembre 2022, non officiel)
La communauté
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873957/pasted-from-clipboard.png)
Offres d'emploi
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873962/pasted-from-clipboard.png)
(2021)
La communauté
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Langages les plus populaires
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873962/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873967/pasted-from-clipboard.png)
Côté entreprise
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
L'évolution des salaires
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873878/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873879/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873885/pasted-from-clipboard.png)
Baromètre AFUP
Conclusion
Conclusion
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Pourquoi PHP n'est pas près de mourir ?
- Toujours très utilisé
- Énorme communauté
- Simple et rapide
- Outillé
- fiable et scalable
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873599/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873608/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873611/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9873613/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9874093/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9870291/PngItem_433793.png)
Conclusion
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1434751/images/9871817/kisspng-modern-php-new-features-and-good-practices-comput-php-from-scratch-por-jason-stafford-5c05ac6052cc74.1344655915438756803392.png)
Merci à tous !
Où en est PHP en 2023 ? - ConFoo 2023
By Karim PINCHON
Où en est PHP en 2023 ? - ConFoo 2023
PHP propulse une grande partie du web mondial depuis 20 ans. Il est même le principal langage de beaucoup d'entreprises de la French Tech. Nous allons nous intéresser à sa dualité : capable de créer facilement une page web dynamique mais aussi construire une application complexe avec des enjeux de performances et de fiabilités. Je vous propose un tour d'horizon du langage, de son évolution, de ses principaux frameworks et de son écosystème.
- 467