Où en est PHP en 2023 ?

A propos de moi
Karim Pinchon
- Développeur backend
- @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
2022
PHP 8.2

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)
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)
Callable de première classe
Les fonctionnalités

<?php
$foo = $this->foo(...);
$fn = strlen(...);
Depuis PHP 8.1 (fin 2021)
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, 2021
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 !
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, 2021
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

Profiler 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é
La communauté

Langages les plus populaires



source : stackoverflow
La communauté

Langages les plus utilisés

source : github

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
La communauté


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
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 ? - 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.
- 627