Loïc Faugeron's Avatar

Loïc Faugeron

@loicfaugeron

Test. Code. Refactor. Repeat!

30
Followers
81
Following
143
Posts
02.12.2024
Joined
Posts Following

Latest posts by Loïc Faugeron @loicfaugeron

Post image

All projects require some monkey work, #PHP interpreter is no exception.

Parsing functions params is done with ZPP or fast ZPP, many being converted to the latter.

Does it mean many native functions will be slightly faster? Yes!

Should I do a thread about how params are parsed by PHP?

10.03.2026 08:09 👍 1 🔁 1 💬 1 📌 0

#Vim satisfaction when you want to split a list of argument from inline to multiline: `f,` to find the first comma `a<Enter>` to move the argument to the newline.

And then you just repeatedly type `;` then `.` 💙

09.03.2026 07:41 👍 0 🔁 0 💬 0 📌 0
Preview
Escaping the Code Maze, Wed, Mar 11, 2026, 6:30 PM | Meetup We return in March and we have Yannick giving his talk "Escaping the Code Maze". **Escaping the Code Maze** Yannick Chenot Exploring a code base is like navigating a maze

📢 Bristol! I'm speaking at PHPSW this Wednesday (11 March).

I’ll be giving an extended version of my talk Escaping the Code Maze, introducing the Closed-by-Default Principle.

Are you based in Bristol or in the area? Come say hi!

09.03.2026 07:08 👍 4 🔁 3 💬 0 📌 0
Post image

SplFixedArray uses ~60% less RAM than a regular array in #PHP.

That's because regular ones are always (re)allocated with a power-of-2 capacity. 1025 elements? 2048 allocated!

Fixed size. Integer keys only. No hash table overhead.

Since 5.3. I almost never see it used, do you?

07.03.2026 08:16 👍 3 🔁 2 💬 1 📌 0
Preview
Behind the Scenes: 3 Collaborative Ceremonies for Better Development Boost team collaboration with Event Storming, Example Mapping, and Domain Storytelling. Learn how these modeling ceremonies clarify requirements and align tech teams

📰 #FridayTechReads

New article by Imen Ezzine on our blog 🤩

Learn about 3 collaborative ceremonies: Event Storming, Example Mapping & Domain Storytelling

Imen explains how these ceremonies impacted her journey to becoming a better #PHP developer 🚀

🔗 tinyurl.com/59wck48m

06.03.2026 11:58 👍 1 🔁 2 💬 0 📌 0

🤘

05.03.2026 14:49 👍 0 🔁 0 💬 0 📌 0
Le Cafe - Oldelaf | FUTURE
Le Cafe - Oldelaf | FUTURE YouTube video by LOST

Obligatory clip "Le Cafe" www.youtube.com/watch?v=UGtK...

05.03.2026 14:36 👍 1 🔁 0 💬 1 📌 0

The hype is real!!!!!

04.03.2026 10:22 👍 1 🔁 0 💬 0 📌 0
Post image Post image Post image Post image

This worked well 10 years ago, back when I worked at ConstantCo and needed to maintain a handful of APIs.

This works especially well with legacy applications in need of modernising. With BisouLand, the QA app is the one place to run all tests, CS, static analysis, rector, etc...

04.03.2026 09:25 👍 0 🔁 0 💬 0 📌 0
Post image Post image Post image

With 2 apps needing the same code, I pulled an old trick: monorepo.

Extracted shared code into packages, keep them in one repo. No Packagist, no propagating changes across repos (a pain I know all too well).

No extra tooling: Composer handles it out of the box

gnugat.github.io/2026/03/04/x...

04.03.2026 07:34 👍 1 🔁 0 💬 1 📌 0

This unlocks new possibilities, your input models can now hold logic. For example, you can add a method in your input class and mark it with `#[Interact]` to ask for required args.

Yes! you can finally use `$this` instead of `$input->getArgument()` and `$input->setArgument()`.

#Symfony #PHP #DX

09.11.2025 14:36 👍 7 🔁 2 💬 0 📌 0
Post image

Micro-optimization in #PHP 8.5: fast-path for implode() when the separator is a single character.

It’s a tiny change in ext/standard, but given how hot this path is in real-world apps, it’s far from negligible.

Always fun to optimize hot-paths right inside the engine.

github.com/php/php-src/...

03.03.2026 10:24 👍 6 🔁 1 💬 1 📌 0
Preview
PHP-TUI Progress Update 30/11/2023: I continued to work on it and versions have been tagged and you can visit the docs and view a follow up blog post about Term). TL;DR I’ve been working on a TUI framework for PHP. It...

In the meantime, if you want to build PHP TUIs, you can use PHP TUI :)

www.dantleech.com/blog/2023/11...

27.02.2026 12:56 👍 0 🔁 0 💬 0 📌 0

#Symfony Terminal component to be announced by @fabien.potencier.org at the keynote???

OMG can't wait to build PHP TUIs!!!!

27.02.2026 12:10 👍 1 🔁 0 💬 1 📌 1

I've added the Making App link at the bottom of my article. Thanks again for pointing it out!

26.02.2026 09:08 👍 2 🔁 0 💬 1 📌 0

It really sounds very similar!
Where it diverges, if I understood correctly:
- Making App is the UI for devs, devs don't interact anymore with the actual app
- Making App isn't used by product / QA

Thanks for sharing, this is very interesting (too bad the Making App picture is gone!)

25.02.2026 16:52 👍 0 🔁 0 💬 0 📌 0
Post image Post image Post image Post image

Back when I worked at Bumble, I discovered their internal API that drives the app into any state on demand.

No DB hacks, no debug code. I call this pattern Test Control Interface (any official name for it?).

Here's how I built one in 2 weeks with modern Symfony.

gnugat.github.io/2026/02/25/x...

25.02.2026 08:10 👍 1 🔁 0 💬 1 📌 0

Excellent find, thank you for sharing!
I'll see if it can replace my git-fetch script (github.com/gnugat/dotfi...)

23.02.2026 13:31 👍 1 🔁 0 💬 0 📌 0
Preview
Cleaning up merged git branches: a one-liner from the CIA's leaked dev docs | spencer.wtf How to delete all merged git branches locally with a single command. This one-liner has been in my zshrc since 2017 — I found it buried in the CIA's Vault7 l...

Un one-liner Git pour nettoyer toutes les branches mergées localement, trouvé dans les docs de dev internes de la CIA leakées en 2017. Pratique pour éviter d'avoir 40 branches qui traînent. @spencerldixon.bsky.social

23.02.2026 12:20 👍 6 🔁 3 💬 2 📌 0

I like typed constants. They make the code more consistent (typed properties, etc), and they explicitly declare the types for readers. But yeah, it's syntactic sugar

21.02.2026 08:20 👍 1 🔁 0 💬 0 📌 0

I'e used exclusively Opus 4.6 since the 9th until today (the 18th), and just finished burning all that £38 extra credit.

Good timing, now I'll use exclusively Sonnet 4.6 for the next 9 days to compare, I guess 😅

18.02.2026 13:16 👍 0 🔁 0 💬 0 📌 0
Claude Code followed with: I have everything I need. The plan is elegantly simple — so cunning that a fox who'd been appointed Professor of Cunning at Oxford University would be in awe. Let me write it
  up.

Claude Code followed with: I have everything I need. The plan is elegantly simple — so cunning that a fox who'd been appointed Professor of Cunning at Oxford University would be in awe. Let me write it up.

Brilliant

13.02.2026 07:42 👍 0 🔁 0 💬 0 📌 0
Claude Code answered: A plan so cunning you could put a tail on it and call it a weasel. Let me explore the codebase thoroughly first.

Claude Code answered: A plan so cunning you could put a tail on it and call it a weasel. Let me explore the codebase thoroughly first.

Claude knows its classics

13.02.2026 07:41 👍 0 🔁 0 💬 1 📌 0
The Claude Code prompt says: Let's plan the greatest cunning plan to have ever been cunningly planned, Baldrick

The Claude Code prompt says: Let's plan the greatest cunning plan to have ever been cunningly planned, Baldrick

Prompt engineering, 2026 version

13.02.2026 07:40 👍 0 🔁 0 💬 1 📌 0

Fun fact:
1. index.php first require_once ../vendor/autoload_runtime.php
2. autoload_runtime.php then require ../public/index.php 😅
3. index.php returns the Kernel closure
4. autoload_runtime.php gives the closure to the Runtime

🤯

11.02.2026 11:02 👍 0 🔁 0 💬 0 📌 0

With the help of packages, e.g. runtime/frankenphp-symfony for FrankenPHP, when those environments are detected, then a loop is created to handle requests in a long running process (app server).

This means there's no need to modify public/index.php

11.02.2026 11:00 👍 0 🔁 0 💬 1 📌 0

SymfonyRuntime will detect the environment.

If PHP-FPM / CLI is detected, it'll create the Request from the PHP super globals, pass it to the Kernel and get the Response. Exactly like the old public/index.php

11.02.2026 10:58 👍 0 🔁 0 💬 1 📌 0
Before: public/index.php instanciates the Kernel, then creates the Request from PHP super globals, the passes the request to the kernel and gets a response, then we "send" (print) the response and finally we handle post processing events (kernel terminate).

Before: public/index.php instanciates the Kernel, then creates the Request from PHP super globals, the passes the request to the kernel and gets a response, then we "send" (print) the response and finally we handle post processing events (kernel terminate).

After: public/index.php requires_once vendor/autoload_runtime.php, which then requires (back!) public/index.php, which this time returns a closure which instantiates the Kernel.
Back to autoload_runtime.php, it instantiates a SymfonyRuntime, and then executes it with the Kernel closure.

After: public/index.php requires_once vendor/autoload_runtime.php, which then requires (back!) public/index.php, which this time returns a closure which instantiates the Kernel. Back to autoload_runtime.php, it instantiates a SymfonyRuntime, and then executes it with the Kernel closure.

The #Symfony Runtime.

Before: index/public.php instantiates the Kernel, create the Request, pass it to the Kernel and get the Response.

After: create a closure that instantiates the Kernel, and the Symfony Runtime will take care to create Requests, pass them the to Kernel and get the Response.

11.02.2026 10:56 👍 1 🔁 0 💬 1 📌 0
Preview
Introducing Safe and Progressive Strict Type Adoption Rule | Rector PHP's `declare(strict_types=1)` directive is a powerful tool for preventing subtle bugs. Yet most existing, mature projects don't use it consistently, if at all. Why? Because automatically adding it t...

Rector #PHP can now add `declare(strict_types=1)` to PHP files that are already type-safe 🎉.

This is to be compared to PHP CS Fixer which can add that declare statement, but will do it for ALL PHP files regardless those are type-safe or not.

getrector.com/blog/introdu...

10.02.2026 17:59 👍 0 🔁 0 💬 0 📌 0
Preview
AutoMapper 10.0: High-performance mapping ready for the future This is a major milestone for the library: AutoMapper has reached version 10.0. While our promise remains unchanged — transforming your data from one format to another as fast as possible —

🎉 AutoMapper turns 10! 🎉

We just released AutoMapper version 10, the fastest way to map data in PHP 💪 🚀

Learn more about our usage of TypeInfo, ObjectMapper compatibility and what it can bring to your projects:

jolicode.com/blog/automa...

#symfony #php #mapping #dto

10.02.2026 14:38 👍 8 🔁 4 💬 0 📌 0