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
• 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