Every time I mention we build in PHP, someone raises an eyebrow. "Still using PHP?" is the polite version. The impolite version is usually a joke about WordPress.
The assumption is that PHP is a legacy language — you inherit it, you don't choose it. In 2025, that assumption is wrong. And it's costing teams real money.
Here's why we chose PHP 8.3 for our SaaS platform, with concrete numbers.
01The PHP everyone remembers is 15 years old
Most opinions about PHP come from PHP 5.4 or 5.6 era code. That's fair — for a long time, PHP was slower, was messier, and did encourage bad practices.
But PHP 7 (2015) was a major rewrite. PHP 8 (2020) added JIT compilation. PHP 8.3 (2023) is faster than Go in some web workloads and faster than Node.js in most.
The PHP you're picturing isn't the PHP we use.
02Real benchmarks from our own stack
We recently benchmarked our API endpoints against a rewrite we did in Node.js (for a client who wanted a Node.js service). Same queries, same database, same network. Here's what we found:
| Endpoint | PHP 8.3 (Laravel) | Node.js (Express) |
|---|---|---|
| Simple GET (cached) | 12ms | 18ms |
| Authenticated GET | 24ms | 31ms |
| Complex query (5 joins) | 78ms | 82ms |
| JSON serialize (1MB) | 34ms | 41ms |
| Form POST + insert | 45ms | 52ms |
PHP won every category. Not by much — but consistently.
Is this definitive? No. Benchmarks are always workload-specific. But it undercuts the assumption that PHP is inherently slow. It isn't.
03The real reason we chose PHP: development speed
Performance is table stakes. The real advantage is how fast we ship.
Laravel's ecosystem is unmatched
We use Laravel. In the past year, features that would take a week in Node.js or Django took us:
- Full authentication (login, register, email verification, password reset, 2FA): 4 hours
- Multi-tenant SaaS billing (Stripe integration): 6 hours
- Admin panel (CRUD, filters, permissions): 2 days
- Background job queue: 30 minutes
- Scheduled tasks: 15 minutes
- API authentication (Sanctum tokens): 45 minutes
- Typed properties
- Named arguments
- Enums
- Constructor promotion
- Read-only properties
- Fibers (async)
- Match expressions
- First-class callable syntax
- Arrow functions
Every one of these exists as a first-class package, is documented, and works out of the box. The equivalent in Node.js usually means gluing together 6 libraries and hoping they play well together.
The language itself is now modern
PHP 8.3 has:
If you write PHP 8.3 correctly, it doesn't look like PHP 5. It looks like a modern, expressive backend language.
Deployment is boring (in a good way)
A PHP deploy is often just:
```bash
git pull
composer install --no-dev
php artisan migrate
php artisan config:cache