Où en est PHP en 2023 ?
A propos de moi
Karim Pinchon
- Développeur backend
- Actuellement chez
- @kpn13
- https://blog.karimpinchon.com
A propos de moi
Pourquoi cette présentation ?
Pourquoi cette présentation ?
J'
PHP
Pourquoi cette présentation ?
Pourquoi cette présentation ?
Le langage
Le langage
Un bref historique
Une histoire de performances
Quoi de neuf ?
Un bref historique
Un bref historique
Création de PHP
Foundation PHP
PHP 7
1994
Composer
/ Packagist
2015
2010
PHP 6
2021
2009
2011
2023
PHP 8.3
PHP-FIG
Que lui reproche-t-on ?
Un bref historique
(historiquement)
Que lui reproche-t-on ?
Un bref historique
PHP-FIG
Un bref historique
PHP Framework Interop Group
Une histoire de performances
Les performances
Les performances
Les performances
Et face aux autres langages ?
Les performances
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
<?php
function foo($bar): bool
{
...
}
Depuis PHP 7.0 (fin 2015)
Type hint scalaire
Les fonctionnalités
<?php
function foo(string $bar): bool
{
...
}
Depuis PHP 7.0 (fin 2015)
Erreur fatale
Les fonctionnalités
<?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
<?php
function foo(?string $bar): ?int
{
...
}
Depuis PHP 7.1 (fin 2016)
Type hint d'objets
Les fonctionnalités
<?php
function foo(Bar $bar)
{
...
}
Depuis PHP 7.2 (fin 2017)
Les propriétés typées
Les fonctionnalités
<?php
class Foo
{
public string $bar;
public Baz $baz;
}
Depuis PHP 7.4 (fin 2019)
Les fonctions fléchées
Les fonctionnalités
<?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
<?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
<?php
function foo(string $arg1, string $arg2) { ... }
foo(arg2: 'bar', arg1: 'baz');
Depuis PHP 8.0 (fin 2020)
Les attributs
Les fonctionnalités
<?php
use App\Attributes\BarAttribute;
#[BarAttribute]
class Foo
{
#[BarAttribute]
public $baz;
}
Depuis PHP 8.0 (fin 2020)
Attribut SensitiveParameter
Les fonctionnalités
<?php
class User
{
#[\SensitiveParameter]
public string $password;
}
Depuis PHP 8.2 (fin 2022)
Match()
Les fonctionnalités
<?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
<?php
$foo = $foo->getBar()?->getName();
Depuis PHP 8.0 (fin 2020)
str_contains()
Les fonctionnalités
<?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
<?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
<?php
enum Status
{
case OPEN;
case CLOSE;
}
Depuis PHP 8.1 (fin 2021)
Les propriétés readonly
Les fonctionnalités
<?php
class Foo
{
public readonly Bar $bar;
}
Depuis PHP 8.1 (fin 2021)
Les classes readonly
Les fonctionnalités
<?php
readonly class Foo
{
public string $bar;
public string $baz;
}
Depuis PHP 8.2 (fin 2022)
Callable de première classe
Les fonctionnalités
<?php
$foo = $this->foo(...);
$fn = strlen(...);
Depuis PHP 8.1 (fin 2021)
PHP 8.3
Les fonctionnalités
- amélioration des classes readonly
- json_validate()
- typage des constantes
- ...
(release le 23 novembre 2023)
Just-in-time (JIT) compiler
Les fonctionnalités
Multi threading
Les fonctionnalités
TODO
Ce qu'il manque
Les fonctionnalités
Les génériques
Nettoyer les inconsistances de l'API
Des objets
scalaires
L'ecosystème
L'écosystème
Construire une app
Développer une app
Tester une app
Assurer la qualité
Construire une application
Composer
Construire une application
Composer
Construire une application
Le gestionnaire de
dépendances de PHP
- actuellement en V2 (perfs )
- dispo sur toutes les platformes
- image docker officielle
Frameworks
source: Jetbrain, 2022
Construire une application
Les plus utilisés
Frameworks
Construire une application
Frameworks
Construire une application
- API first
- RAD
- REST et GraphQL
- interopérable / web sémantique
- générateur d'admin et clients
Asynchrone
Les fonctionnalités
- générateurs
- promises
- fibers
- ReactPHP
- AMPHP
- ...
Serverless
Les fonctionnalités
Heyyyy !
Serveur d'application
Les fonctionnalités
Application de bureau
Les fonctionnalités
Vanilla PHP
- micro page web
- cli
- script
Construire une application
Développer une application
Développer une application
IDE
Développer une application
source: Jetbrain, 2022
IDE
Les plus utilisés
Debugger du PHP
<?php
echo 'coucou';
dd($foo);
Développer une application
Debugger du PHP
Développer une application
Debugger du PHP
Développer une application
Debugger du PHP
Développer une application
Tester une application
- PHPUnit
- PHPSpec
- Pest
- Behat
- InfectionPHP
- Panther
- ...
Tester une application
Frameworks de test
Je veux écrire des tests unitaires pour m'assurer de la non régression de mes fonctions / méthodes :
Tester une application
Frameworks de test
Je veux écrire des tests d'intégration pour m'assurer du bon fonctionnement de mon application :
Tester une application
Frameworks de test
Je veux écrire des tests "end to end" pour m'assurer du bon fonctionnement de mon application :
Tester une application
Frameworks de test
Je veux écrire des tests de mutation pour m'assurer de la pertinence de mes tests :
Tester une application
Frameworks de test
Assurer la qualité d'une application
- PHPStan
- PHPInsights
- PHP-CS-Fixer
- Psalm
- RectorPHP
- ...
Assurer la qualité d'une application
PHPStan
Finds bugs in your code without writing tests
Assurer la qualité d'une application
PHPInsight
analyze the code quality of your PHP projects
Assurer la qualité d'une application
PHP-CS-Fixer
fixes your code to follow standards
Assurer la qualité d'une application
- applique des standards
- configurable
RectorPHP
How can We Upgrade PHP and FW?
Assurer la qualité d'une application
- utiliser les nouveautés de PHP
- migrer de versions de Symfony, ...
- appliquer des règles custom
Assurer la qualité d'une application
Le monde réel
La fondation PHP
Le monde réel
La communauté
Côté entreprise
La fondation PHP
Quoi ?
-> association à but non lucratif
Quand ?
-> créée en 2021
Pourquoi ?
-> développer PHP
Comment ?
-> sponsorisée
La fondation PHP
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
Administration temporaire
Développeur core PHP
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
Nikita Popov
Développeur
core PHP
Roman Pronskiy
Core team
Symfony
Josepha Haden
Benjamin Eberlei
Matthew Weier
Nicolas Grekas
Directrice executive
Wordpress
Manager chez
Jetbrains
Lead chez Zend
La fondation PHP
Administration actuelle
Développeur
core PHP
Développeur
core PHP
Arnaud Le Blanc
Derick Rethans
George Peter Banyard
Ilija Tolivo
Jakub Zelenka
Máté Kocsis
La fondation PHP
Six dev à temps partiel
La communauté
(en France)
La communauté
Langages les plus populaires
source : stackoverflow
La communauté
Langages les plus utilisés
source : github 2022
La communauté
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
AFUP
Association Française des Utilisateurs de PHP
La communauté
ForumPHP
AFUPDay
SuperApéro PHP
Baromètre des salaires
Newsletter veille techno
...
La communauté
AFUP
Association Française des Utilisateurs de PHP
Côté entreprise
Côté entreprise
Des projets d'envergures
Côté entreprise
Des startups qui misent dessus
Côté entreprise
Offres d'emploi
19% des offres
13% des offres
12% des offres
7% des offres
(Septembre 2022, non officiel)
La communauté
Offres d'emploi
(2021)
La communauté
Langages les plus populaires
Côté entreprise
L'évolution des salaires
Baromètre AFUP 2022
Conclusion
Conclusion
Pourquoi PHP n'est pas près de mourir ?
- Toujours très utilisé
- Énorme communauté
- Simple et rapide
- Outillé
- fiable et scalable
Conclusion
Merci à tous !
Où en est PHP en 2023 ?
By Karim PINCHON
Où en est PHP en 2023 ?
- 495