Où en est PHP en 2022 ?

A propos de moi

Karim Pinchon

 

  • Développeur backend
  • Actuellement chez
  • @kpn13
  • https://blog.karimpinchon.com

A propos de moi

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

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

foo

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

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

Conclusion

Conclusion

Pourquoi PHP n'est pas près de mourir ?

  • Toujours très utilisé
  • Difficile de migrer une stack entière
  • Simple et rapide
  • Outillé
  • fiable et scalable

Conclusion

Merci à tous !

Où en est PHP en 2022 ?

By Karim PINCHON

Où en est PHP en 2022 ?

  • 450