← Back to list

The PHP Framework Rot — and Why I Walked Away as a Senior Developer

MVC Isn’t the Problem — MVC (PHP) Frameworks Are

DEVS not NULL · 2026-05-28 12:32 · 1 claps · 4.1 min read
#php-development #php #mvc #framework #apache
Open on Medium ↗
Wiki topics: STP · Startups & Venture

The PHP Framework Rot — and Why I Walked Away as a Senior Developer

MVC Isn’t the Problem — MVC (PHP) Frameworks Are

Let’s start with the obvious: I still use MVC and PHP. I just avoid PHP MVC frameworks whenever possible.

My common project architecture has controllers, views, templates, and models — but only up to the point where MVC makes sense.

The rot begins when MVC stops being a pattern and becomes a religion. Modern PHP frameworks turned MVC into exactly that.

This article is the autopsy.

The Rot: When MVC Frameworks Hijacked PHP

Around PHP 7.4, the ecosystem collectively decided:

“Let’s turn PHP into a Java application server.”

And suddenly every framework needed:

  • service providers
  • dependency injection containers
  • middleware pipelines
  • event dispatchers
  • PHP attributes
  • factory patterns
  • interfaces everywhere

All of this to simulate a long‑running application server in a language that:

  • boots fresh every request
  • is file‑modular
  • is SSR‑native
  • is explicit by design

Frameworks didn’t modernize PHP. They fought the language.

The Lie: “This is modularity”

No, it isn’t.

Real modularity is:

  • one file = one module
  • one class = one responsibility
  • explicit wiring via plain PHP
  • a deterministic, readable bootstrap

Framework modularity is:

  • one interface
  • one class
  • one factory
  • one provider
  • one config file
  • one container binding
  • one lifecycle hook

…for a service that should have lived in one 150‑line class file and nothing else.

This isn’t modularity. It’s micro‑segmentation and class micro‑management — architecture cosplay.

The Cause: Plugin Ecosystems + Team Boundaries

1. Plugin Ecosystems

Framework authors needed extension points. So they invented:

  • DI containers
  • service providers
  • event buses
  • pipelines

Not because PHP needed them — but because plugins needed them.

2. Large Teams

Enterprise teams needed strict boundaries, mockable services, and replaceable implementations. So they forced PHP into a shape it was never meant to hold.

This wasn’t evolution. It was Java‑brain imported into PHP.

The Reality: PHP Already Had Everything

PHP already was:

  • a module system (files + autoloading)
  • a template engine (plain PHP templates)
  • a dependency resolver (manual wiring)
  • a router (simple maps + controllers)
  • a document templating language
  • an SSR engine (output buffering + PHP)

Frameworks didn’t add these things. They replaced them with slower, more abstract, more ceremonial versions.

PHP gave you a wheel. MVC frameworks gave you a wheel broken into 14 pieces, wrapped in YAML, injected through a container, and bootstrapped by a provider.

The Breakpoint: When I Walked Away

As a senior developer, you eventually hit the moment where you realize:

“I’m spending more time fighting the framework than building the product.”

I walked away when:

  • I needed five files to create a service
  • I needed three layers to render a view
  • I needed a container binding to instantiate a class
  • I needed a provider to register the binding
  • I needed a config file to register the provider
  • I needed a pipeline to run the config

All for something PHP could do in two lines.

The Escape: MVC without the Rot

My framework is still MVC — but MVC as a pattern, not MVC as a framework ideology.

It has:

  • controllers
  • views
  • templates
  • models

But it stops exactly where MVC stops being useful.

No DI container. No service providers. No lifecycle events. No annotation routing. No middleware stack. No plugin‑driven architecture. No micro‑segmentation.

Just PHP doing what PHP is good at.

The Real Break: Once You Stop Fighting the Framework, You Start Seeing the Stack Clearly

And this is where the shift happens.

Once you strip away the framework ceremony, you notice something uncomfortable:

The problem was never MVC. The problem was the ecosystem built around pretending PHP needed to be something else.

And that ecosystem didn’t stop at frameworks — it infected the entire narrative around PHP’s runtime stack.

Which leads directly into the next truth.

The PR War: PHP + Apache Aren’t “Old” — They’re Just not Profitable

Here’s the part the industry never admits:

PHP + Apache aren’t outdated — they’re unprofitable.

They don’t sell:

  • cloud lock‑in
  • Kubernetes clusters
  • serverless glue
  • dev‑tool subscriptions
  • expensive training and certifications

So the PR narrative paints them as “legacy” and “not modern.”

The reality:

  • PHP still powers a massive portion of the web
  • Apache HTTP Server remains everywhere
  • PHP 8.x is extremely fast and modern
  • SSR is “back” — PHP never left

And in practice?

I run Nginx for I/O and request handling, then hand off to Apache for execution. It gives me the best of both worlds:

  • Nginx speed + concurrency
  • Apache stability + predictable PHP integration

No hype. No ceremony. Just engineering.

Why PHP Will Outlive Most Modern Stacks — A Senior Developer’s Perspective

PHP has survived every hype cycle because it evolves when it matters.

When Node pushed async, PHP gained fibers and event‑loop servers. When Go pushed concurrency, PHP gained coroutine‑style workers. When JVM bragged about JIT, PHP shipped its own.

And while modern stacks chase trends, PHP quietly keeps powering the boring, critical, money‑making parts of the web.

Apache follows the same pattern: stable, predictable, battle‑tested. Not flashy — just immortal.

The Performance Truth: PHP Evolves When It Matters

Every time a new stack claims to be faster, PHP quietly adapts:

  • Node → async I/O + fibers
  • Go → coroutine‑style servers + worker models
  • JVM → JIT + engine optimizations
  • “SSR is back” → PHP has been doing SSR since the 90s

PHP doesn’t chase hype. It integrates the useful parts when they become proven engineering.

Yes, I Use Modern Stacks — Where They Make Sense

I’m not a purist. I’m a pragmatist.

I use:

  • Node.js — only as a build pipeline (bundling, tooling, asset processing)
  • modern bundlers (Vite, esbuild, etc.) where they help
  • TypeScript or Rust for specific, high‑value cases

But the backend?

PHP + Nginx + Apache. Because it works. Because it’s fast. Because it’s stable.

The Conclusion: PHP Doesn’t Need MVC Frameworks — It Needs MVC Done Right

Modern PHP frameworks are impressive engineering. But they are not PHP’s natural habitat.

If you want:

  • control
  • performance
  • transparency
  • simplicity
  • debuggability
  • long‑term maintainability

Then you don’t need a framework. You need PHP as PHP — and MVC as a pattern, not a religion.

That’s why I walked away. Not because MVC is bad — but because MVC frameworks forgot what PHP is.


메타데이터
post_id
302534cb7e54
slug
the-php-framework-rot-and-why-i-walked-away-as-a-senior-developer-302534cb7e54
url
https://medium.com/@devs-not-null/the-php-framework-rot-and-why-i-walked-away-as-a-senior-developer-302534cb7e54
canonical_url
https://medium.com/@devs-not-null/the-php-framework-rot-and-why-i-walked-away-as-a-senior-developer-302534cb7e54
author_url
https://medium.com/@devs-not-null
status
ok
fetched_at
2026-06-12 07:40:50