J'
PHP
Création de PHP
Foundation PHP
PHP 7
1994
Composer
/ Packagist
2015
2010
PHP 6
2021
2009
2011
2023
PHP 8.3
PHP-FIG
(historiquement)
PHP Framework Interop Group
Et face aux autres langages ?
source : https://greenlab.di.uminho.pt
(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,
) {}
}
<?php
function foo($bar): bool
{
...
}
Depuis PHP 7.0 (fin 2015)
<?php
function foo(string $bar): bool
{
...
}
Depuis PHP 7.0 (fin 2015)
<?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)
<?php
function foo(?string $bar): ?int
{
...
}
Depuis PHP 7.1 (fin 2016)
<?php
function foo(Bar $bar)
{
...
}
Depuis PHP 7.2 (fin 2017)
<?php
class Foo
{
public string $bar;
public Baz $baz;
}
Depuis PHP 7.4 (fin 2019)
<?php
$func = fn(Foo $f) => echo $f->name;
$func($foo);
Depuis PHP 7.4 (fin 2019)
<?php
class Foo
{
public function __construct(
private Bar $bar,
private string $name,
) {}
}
Depuis PHP 8.0 (fin 2020)
<?php
function foo(string $arg1, string $arg2) { ... }
foo(arg2: 'bar', arg1: 'baz');
Depuis PHP 8.0 (fin 2020)
<?php
use App\Attributes\BarAttribute;
#[BarAttribute]
class Foo
{
#[BarAttribute]
public $baz;
}
Depuis PHP 8.0 (fin 2020)
<?php
class User
{
#[\SensitiveParameter]
public string $password;
}
Depuis PHP 8.2 (fin 2022)
<?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)
<?php
$foo = $foo->getBar()?->getName();
Depuis PHP 8.0 (fin 2020)
<?php
// avant
strpos($sentence, 'foo') !== false;
// après
str_contains($sentence, 'foo');
Depuis PHP 8.0 (fin 2020)
<?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)
<?php
enum Status
{
case OPEN;
case CLOSE;
}
Depuis PHP 8.1 (fin 2021)
<?php
class Foo
{
public readonly Bar $bar;
}
Depuis PHP 8.1 (fin 2021)
<?php
readonly class Foo
{
public string $bar;
public string $baz;
}
Depuis PHP 8.2 (fin 2022)
<?php
$foo = $this->foo(...);
$fn = strlen(...);
Depuis PHP 8.1 (fin 2021)
(release le 23 novembre 2023)
TODO
Les génériques
Nettoyer les inconsistances de l'API
Des objets
scalaires
source: Jetbrain, 2022
Les plus utilisés
Heyyyy !
source: Jetbrain, 2022
Les plus utilisés
<?php
echo 'coucou';
dd($foo);
Je veux écrire des tests unitaires pour m'assurer de la non régression de mes fonctions / méthodes :
Je veux écrire des tests d'intégration pour m'assurer du bon fonctionnement de mon application :
Je veux écrire des tests "end to end" pour m'assurer du bon fonctionnement de mon application :
Je veux écrire des tests de mutation pour m'assurer de la pertinence de mes tests :
Finds bugs in your code without writing tests
analyze the code quality of your PHP projects
fixes your code to follow standards
How can We Upgrade PHP and FW?
-> association à but non lucratif
-> créée en 2021
-> développer PHP
-> sponsorisée
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
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
Développeur
core PHP
Développeur
core PHP
Arnaud Le Blanc
Derick Rethans
George Peter Banyard
Ilija Tolivo
Jakub Zelenka
Máté Kocsis
(en France)
source : stackoverflow
source : github 2022
source : Jetbrains
En quelques chiffres :
ForumPHP
AFUPDay
SuperApéro PHP
Baromètre des salaires
Newsletter veille techno
...
19% des offres
13% des offres
12% des offres
7% des offres
(Septembre 2022, non officiel)
(2021)
Baromètre AFUP 2022