I’ve run PHPCPD for longer than I want to admit in print. It does what it needs to, which is find the duplicated blocks someone (not me…) copied from one class into another when I they were in a hurry, and it flagged them so we could go back and clean them up. The trouble is that the project stopped being maintained a while ago, and one of our security scanning tools flagged it as being “unmaintained” and therefore “insecure” (it’s not). So, I went looking for a replacement. by Scott Keck-Warren
In Part IX, we treated queues as real production infrastructure. Once asynchronous work is bounded and durable, the next weak point is often much closer to the request itself – the PHP runtime. by Wendell Adriel
We’ve talked about how neural networks make predictions through forward propagation, and how gradient descent helps them learn by adjusting weights. But we’ve been glossing over a crucial detail – how does the network actually know which weights to adjust and by how much? That’s where backpropagation comes in – one of the most elegant algorithms in computer science and the secret sauce that makes deep learning possible. by Christopher Miller
A few years back, [this column took apart the Mersenne Twister algorithm](https://phpa.me/security-corner-2026-09-01). The lesson was blunt – watch 624 outputs and you own the generator’s entire internal state. Output that looks perfectly random can still be perfectly predictable. Statistical beauty, zero security. by Eric Mann
Hello friends, and welcome to the next installment of my Grumpy Testing Patterns series. In these articles, I am applying the same principles of “design patterns” to the subject of testing by identifying scenarios that come up when creating tests that can be solved with repeatable patterns. This time out, I want to discuss some strategies for avoiding conditional logic in tests. by Chris Hartjes
Rate limiting is one of those things that feels simple until you actually sit down to implement it properly. by Steve McDougall
Caching is the highest-leverage performance change you can make in most Laravel apps. It is also one of the easiest to get subtly wrong in ways that cause stale data, thundering herds, and impossible-to-reproduce bugs. Here are the tips that keep caching fast *and* correct. by Eric Van Johnson
This month, let’s examine how to integrate Doctrine ORM 3.x into a standalone, non-Symfony PHP application, like our Spacetraders Web UI. We can let Doctrine ORM handle stock database queries for us so we don’t have to write much, or any, SQL. I’ll cover essential setup patterns, from utilizing PHP 8 attributes and asymmetric visibility (public private(set)) to handling custom Value Objects via custom DBAL mapping types. Finally, I’ll show you how to clean up application controllers by encapsulating query logic inside custom repositories and isolating template-specific view behavior using the Presenter pattern. by Oscar Merida
The application I work in every day started life as a ColdFusion app. It has been a PHP application for the last fifteen or sixteen years, and the Git history only goes back to 2010 because that is when someone got around to putting it in version control. It was older than that. If you have spent time in a codebase like this, you know the feeling – every file is a small archaeological dig. by Kalen Johnson
Clean Architecture organizes your code into distinct layers where dependencies always flow inward toward your business rules. This keeps your core logic independent of databases and web frameworks. Through building a complete User Management API, you will learn practical techniques for creating entities, use cases, and controllers that remain testable and adaptable as your project grows. by Sarah Aburu
Leave a comment
Use the form below to leave a comment: