Slide 1

Slide 1 text

Nicolas Grekas @nicolasgrekas https://externals.io/ message/118040 Symfony, PHP and its Foundation

Slide 2

Slide 2 text

PHP leads the web 2

Slide 3

Slide 3 text

3 • Apple • Facebook • Pfizer • Flipkart • Slack • Spotify • Etsy • etc. etc. etc. PHP leads the web

Slide 4

Slide 4 text

How many contributors were paid to work on the PHP engine in 2021? 4

Slide 5

Slide 5 text

PHP’s Bus Factor Dmitry Stogov Nikita Popov 5

Slide 6

Slide 6 text

6 Surviving buses May 4, 2021: Blog post by Joe Watkins May 20, 2021: JetBrains reaches out to Joe Nov. 22, 2021: Nikita announces he leaves JetBrains

Slide 7

Slide 7 text

7 JetBrains Does it make sense to look for a replacement and pay for just one developer again?

Slide 8

Slide 8 text

8

Slide 9

Slide 9 text

9 Founding companies Acquia Automattic Craft CMS JetBrains Laravel PrestaShop Private Packagist Symfony Tideways Zend by Perforce

Slide 10

Slide 10 text

We support, advance, and develop the PHP language 10

Slide 11

Slide 11 text

“The PHP Foundation's mission is to ensure the long-term prosperity of the PHP language.” 11 • Improve the language for its users • Provide high-quality maintenance • Retain current contributors and welcome new ones • Promote the public image of PHP php.foundation

Slide 12

Slide 12 text

12 php.foundation “The language decisions are the matter of [email protected]

Slide 13

Slide 13 text

Funding PHP 13

Slide 14

Slide 14 text

14 Funding PHP Total raised: $ 1,111k From organizations: 80% From individuals: 20%

Slide 15

Slide 15 text

15 Funding PHP Total raised: $ 1,111k Recurring: 50% One time: 50%

Slide 16

Slide 16 text

16 Funding PHP: Companies

Slide 17

Slide 17 text

Spending the funds 17

Slide 18

Slide 18 text

18 Spending the funds Total raised: $ 1,111k Paid developers: $ 408k Balance: $ 703k

Slide 19

Slide 19 text

19 Budget is public https://opencollective.com/phpfoundation#category-BUDGET

Slide 20

Slide 20 text

The team 20

Slide 21

Slide 21 text

Team 21 Community Developers Board

Slide 22

Slide 22 text

Team 22 Community Developers Board Paid by JetBrains Paid by the Foundation Paid by Zend

Slide 23

Slide 23 text

Language Impact 23 41% 59% Other contributors The PHP Foundation Share of commits in PHP repository

Slide 24

Slide 24 text

Language Impact 24

Slide 25

Slide 25 text

What are the devs working on? 25 (Fancy things only)

Slide 26

Slide 26 text

26 Gina Peter Banyard • New autoloading mechanism

Slide 27

Slide 27 text

27 Ilija Tovilo • Property hooks

Slide 28

Slide 28 text

28 class User { public function __construct( private string $first, private string $last, ) { } public string $fullName { get => $this->first . ' ' . $this->last; set($v) => [$this->first, $this->last] = explode(' ', $v); } }

Slide 29

Slide 29 text

29 Arnaud Le Blanc • Lazy objects • Generics

Slide 30

Slide 30 text

30 $obj = (new ReflectionClass($class))->newInstanceWithoutConstructor(); $r = ReflectionLazyObject::makeLazy($obj, function (object $obj) { $args = // compute arguments on demand $obj->__construct(...$args); }); $r->skipProperty($propertyName); // ... ReflectionLazyObject::isLazyObject($obj); $r = ReflectionLazyObject::fromInstance($obj); $r->initialize();

Slide 31

Slide 31 text

31 Potential on symfony/var-exporter

Slide 32

Slide 32 text

32 Potential on doctrine/orm

Slide 33

Slide 33 text

33 Máté Kocsis • Clone with

Slide 34

Slide 34 text

34 class Response { public readonly int $status; public function withStatus($status): static { return clone $this with [ 'status' => $status, ]; } }

Slide 35

Slide 35 text

35 Derick Rethans • PECL overhaul

Slide 36

Slide 36 text

36 Jakub Zelenka • JSONSchema support

Slide 37

Slide 37 text

Future goals 37 • Hire and mentor more core devs • More financial stability • Shape a roadmap

Slide 38

Slide 38 text

Projects 2024 38 •PECL Overhaul •Security Audit •FPM Stability •Documentation

Slide 39

Slide 39 text

Advisory Board

Slide 40

Slide 40 text

• Cannot hydrate a DateTime instance created without the constructor #8152 • Casting an object to array does not unwrap references #8655 • WeakMap prevents garbage collection #10043 • Use zval storage for php://memory stream #11106 • Allow suspending fibers in destructors #11389 • Missing CURL_HTTP_VERSION_3 constant #11755 • Wrong magic methods sequence with ?? operator #12695 40 Get bugs fixed

Slide 41

Slide 41 text

• Make class_alias() work with internal classes #9826 • Wrong closure scope class reported for static methods #8932 • Add support for CURLOPT_QUICK_EXIT #10454 • Allow writing to readonly properties during cloning #9403 • Add ReflectionFunction::isAnonymous() #8499 • Add Stringable interface #5083 41 Improve things

Slide 42

Slide 42 text

42 Keep things working Be a Backward Compatibility champion

Slide 43

Slide 43 text

How can you help? 43 Spread the word php.foundation

Slide 44

Slide 44 text

44

Slide 45

Slide 45 text

45 Nicolas Grekas @nicolasgrekas Thank you

Slide 46

Slide 46 text

46 Nicolas Grekas @nicolasgrekas Thank you