I'm cooking another cool addition to Flow #PHP đšâđł
What I was always missing was a proper SQL Parser in PHP, something that can create AST Tree from SQL query string.
So I created one: https://flow-php.com/documentation/components/libs/pg-query/
Nouveau sketchnote du meetup @afup !
@vincent Amstoutz de @cooptilleuls nous a parlé de la refonte du systÚme de filtres @ApiPlatform.
Des filtres plus simples et plus maintenables pour nos APIs !
#PHP #Symfony #APIPlatform #Sketchnote

Huge shoutout to @PHPCSFixer team for implementing #PHP 8.5 support almost on day 1 đđ! It's still not released, but looks pretty complete and stable â€ïž.
If you're using PHP 8.5 already, you may verify it by adding `->setUnsupportedPhpVersionAllowed(true)` in your config file.

#PHP 8.5 is available in #Plesk right now.
Voici ma planche de sketchnote du meetup @afup !
Kevin Nadin de Darkmira nous a prĂ©sentĂ© Symfony UX : faire du front sans ĂȘtre expert JavaScript avec Twig.
Une solution pour les devs PHP qui veulent des interfaces réactives !
#PHP #Symfony #SymfonyUX #Sketchnote

"When you create a string, array, or object, PHP doesnât ask the OS for memory every time. Instead, it carves out space from these pre-allocated chunks. [âŠ] This isnât a bug â itâs an optimization. Reusing already-allocated chunks is much faster than constantly asking the OS for memory and giving it back."
đĄInteresting article on why PHP memory never decreases once allocated.
#PHP #Laravel #Symfony #Memory #Web #Performance
I am seeking speakers for my @phpugffm & @phpugmrn meetups. We prefer in-person presentations in Frankfurt or the Mannheim area, but remote talks are also an option.
If you have anything interesting to share with us, let us know. We'd be more than happy to have you! Thx!
#php #phpc #phpugffm #phpugmrn
So this is a weird one. Anyone have any idea why #PHP #composer would be returning the wrong error codes for a 'composer audit' command? It's happening on just one machine. There are no vulns and one abandoned package, so it should be returning a 2 according to the docs, and does on all the other servers:
https://getcomposer.org/doc/03-cli.md#audit
But it's returning a 1, just on this one #Linux machine. I'm thinking there's maybe some bash weirdness in play?
Composer version 2.7.7
Debian 11
Any ideas welcome!
Deep dive into PHP optimizations, great talk!
From redis to opcache, to apcu and composer optimizations. All within docker, K6, grafana and prometheus.
Preconfigured containes, dashboards and make commands to have them up and running in no time! Great job @dragoonis !
#symfonycon #symfonycon2025 #php #symfony

From 10x faster JSON streaming to FrankenPHP worker mode benchmarks, 2025 marked a massive performance milestone celebrating 30 years of #PHP, 20 of @symfony
, and 10 of @ApiPlatform
. đ
I summarized my #SymfonyCon talk and shared the slides on my blog at https://soyuka.me/2025-performance-milestone-for-the-symfony-ecosystem/
I just stumbled upon a case where property hooks were the best solution: https://andreas.heigl.org/2025/11/27/property-hooks-for-the-win/
#php #propertyhooks #php84 #pdo
Property-Hooks for the win
Property-Hooks were one of the really hot topics of last years PHP8.4 release. And I do have very strong opinions on them. They were and probably still are extremely hyped for something that in my personal opinion should be a very niche thing. In new projects you shouldnât really need them.
But just today I had one of those situations where they helped me combine legacy code with new functionality.
The starting position
I am working on a project where we are using PDO and especially PDO::FETCH_CLASS to create Objects from our database-content.
So the code looks something like this:
function getAllFoos() : array{ $stmt = $this->executePdoQuery(<<<SQL SELECT * FROM table SQL); $stmt->setFetchMode(PDO::FETCH_CLASS, Foo::class); return $stmt->fetchAll();}Foo looks something like this:
final class Foo { public string a; public string b;}And the database-table looks something like this:
CREATE TABLE foo ( a VARCHAR(20), b VARCHAR(20),)Everything worked as expected and calling getAllFoos got me a list of Foo-objects.
So Far so good.
Now I wanted to add a new field to the Foo-object and that should contain an Enum. Easy peasy.
final class Foo { public string a; public string b; private Status $status;}enum Status: string { case Open = 'open'; case Closed = 'closed';}Now I need to update the database
ALTER TABLE foo ADD COLUMN `status` VARCHAR(10) NOT NULL DEFAULT 'open';Thatâs it!
When testing that though I found that it wasnât because now everything blew up when calling getAllFoos âŠ.
What happened?
Well, as expected the fetchAll tried to hydrate the values of the Foo object wth the values from the DB. But the DB contains a string whereas the Foo object expects the respective enum.
There is no out of the box solution to this. PDO has no idea how to convert this database-value into something the object understands (it could infer the expected enum-type from the type-hint but that can get out of hand rather quickly when itâs not an enum bot any other object that doesnât have a ::from method orâŠ)
Property Hooks to the rescue.
So I had to find my own way around this. And here property hooks are awesome when one has to adapt to legacy code.
So this is what my Foo class now looks like
final class Foo { public string a; public string b; private Status $status { set(string|Status $value) { if (is_string($value)) { $value = Status::from($value); } $this->status = $value; } }}Works like a charm now!
#legacy #pdo #php #propertyHooks