Tool Info
- back-end
- languages
- server
Published: 7/22/2025
I have a long history with PHP. I started learning it when it was still at
version 5.2 and faintly remember being excited to refactor all my arrays from
array()
to []
when 5.4 was released.
The language has evolved, my skills have improved and the web development landscape is vastly different from what it was back then. I don’t write a lot of PHP nowadays, but I still follow updates and notable community members. Maintaining existing projects also makes me check out what’s new every now and then.
If you’re curious about my PHP stack, you should check out Reun Media PHP app template. It might not always be the latest and greatest, but I try to keep it up to date whenever I discover new tools and learn new things.
I use Doctrine ORM or DBAL along with Doctrine Migrations for all my database operations.
I replaced PHPUnit with Pest in all my projects in 2024. I already used Codeception Specify and Verify in my PHPUnit tests and migrating to Pest allowed me to get rid of PHPUnit boilerplate code.
Check out
reun/test-utilities
for my
own testing utilities.
My preferred rules can be found in Reun Media PHP app template.
Learning the concept of dependency injection took me a while back in the day, but it was absolutely worth it. PHP-DI is my preferred DI container and I like the way it allows me to configure definitions in plain PHP code instead of using separate configuration files.
Check out Reun Media PHP App Definitions to see how I use it.
I use
phpstan/phpstan-strict-rules
to enforce stricter code quality.
bnf/phpstan-psr-container
helps when working with DI containers.
A collection of useful middlewares. I use ContentType
to make PHP Debug Bar work with Slim.
My PHP framework of choice for over 10 years. I’ve always preferred the simplicity and predictability of middleware approach over MVC.
I don’t use Symfony framework, but I do use some individual components such as Cache, Console and Serializer.
Check out reun/twig-utilities
for my own utilities I’ve written. I also use twig/intl-extra
and
twig/markdown-extra
when needed.
I use Slim whoops to integrate whoops with Slim. There’s also a whoops middleware.
All content © Kimmo Salmela — Source on GitHub